Shell编程零基础教学 - Go语言中文社区

Shell编程零基础教学


Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

正则表达式

在学习shell编程要有一定的正则表达式的基础知识。

    符号                含义                        举例
    ^                  开始标记                 "^abc"满足的例子abc
    ^                 非(在[]内)             "[^abc]"满足例子:ddd、mpd
    $                  结束标记                "abc$"满足例子:abc,mmabc
                   匹配转义后的字符串
    .                  任意字符                "a.c"满足例子:abc,abcd
    <               匹配单词开始               "<abc"满足的例子abc、abcd
    >               匹配单词结束               "abc>"满足的例子abc,pmrabc
    |                   或                     "AAA|BBB"满足例子:AAA,BBBpp
    ?             匹配前一个字符0或1次           "abc?"满足的例子ab、mabcd
    好*            匹配钱一个字符>=0次            “abc*”满足的例子:abbb
    好+            匹配前一个字符>=1次 
    {}          {m}{m,n}{m,}{,n}分别匹配钱一个字符m次、m到n次、>=m次、<=n次
    []          []范围内选其一,比较特殊的[0-9]代表数字,[a-z]代表小写字母
    ()         将候选的所有元素放在()内,用|分隔开      "a(1|2|3)b"满足的例子a1b

这里写图片描述

shell编程

  • shell 变量
    环境变量:用于爆粗能操作系统运行时使用的环境变量,用set命令查看
    可分为用户环境变量(.bash_profile)和系统环境变量(/etc/profile)

位置变量 :将传递给脚本的参数保存在位置变量中,以便于在脚本中引用这些参数
其中Bash定义了9个位置变量,分别是$1 ….脚本编写者在脚本中引用这9个变量,获取传递给脚本的参数

注意:

       $1    位置参数
       $0     脚本名称

例如

shell算术运算

“+”“-” “*”“/”“%”
使用方法

  • $((experssion))
  • $[expression]
  • expr expression

    举例

    • $((5+4))
    • expr 5/4

注意:expr要有空格 # expr 5 + 2

shell内置测试判断

这里写图片描述

举例1
这里写图片描述

[] 方式最常见 注意:测试表达式与中括号之间一定要有空格

举例2
这里写图片描述

这里写图片描述

这里写图片描述

例子3
这里写图片描述
注意 字符串一定要打引号

Data

  • Date –s “2017-06-19 07:30:13” 修改系统时间(临时)
  • Date ‘+%Y%m%d’ 20170609 输出时间 按年月日
  • Date –d ‘7 day ago’ ‘+%Y%m%d’ 输出7天前的日期

这里写图片描述

这里写图片描述

这里写图片描述

脚本案例

#!bin/bash               声明环境
#test               以#开头的部分全部表示注释
#shell脚本从上往下依次执行
date
grep 'root' /etc/passwd

执行Shell脚本
添加权限命令: chmod 744 1.sh
./1.sh (./ 表示当前目录)

. /temp/1.sh 表示执行这个文件

控制语句

for

这里写图片描述
举例1:
这里写图片描述

例子2

#!/bin/bash
for i in {1..10}
do 
mkdir /home/zxq/shell/test/dir$i
done

这里写图片描述

这里写图片描述

#!/bin/bash
for i in ‘seq 50’   #反应好代表命令预先执行
do 
mkdir /home/zxq/shell/test/dir$i
done

#!/bin/bash
For((i=1;i<=10;i++))
Do
Sum=$((SUM+1))
Done
Echo $SUM

while

这里写图片描述

#!/bin/bash
i=1
while [ $i –le 10 ]      #注意空格
do
SUM=$((SUM+i))
i=$[i+1]
done
echo $SUM

读取文件
#!/bin/bash
while read –r line     #read    逐行读取
do
echo $line
done < /etc/passwd     # < 后面接文件

这里写图片描述

这里写图片描述

if

这里写图片描述

#!/bin/bash
if [ 3 –eq 3 ]  #注意 if后面要有空格  [] 也要有空格
then 
echo yes
fi

这里写图片描述

case

这里写图片描述

#!/bin/bash
case $1 in 
top)
    top
    ;;
free)
    free
    ;;
df)
    df
    ;;
*)
    echo "usage:$0{top|free|df}"
esac

这里写图片描述

这里写图片描述

Shell 函数

这里写图片描述

#!/bin/bash
sum(){
    echo $(($1+$2))
}
sum 5 6

计划任务

一次性的计划任务

这里写图片描述

周期性的计划任务

crontab

1)确保服务启动

service crond status
chkconfig --list

2)制定计划任务内容

Crontab –e

和vi界面一样进行输入 * * * * * cmd 前面五列表示时间用空格分开

这里写图片描述

例如:

0 2 * * 3 cp /etc/passwd /tmp       
每周三凌晨2点备份文件/etc/passwd 到tem文件夹中

5 1 10,25 * *   rm –rf /tmp/*   
 每个月10号和25号凌晨1点5分执行(没半个月清空一次tmp)

*/10 * * * * ntpdata 时间服务器IP    
每10分钟执行时间同步

0 1-6 * * *                        
 每天1点到6点执行

3)重启crond服务

service crond restart
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/kaede1209/article/details/73555945
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:29:24
  • 阅读 ( 896 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢