zzzyuan

导航

shell脚本

Shell

什么是shell脚本

实际上就是一些命令的集合

shell脚本的创建和执行

# cd /usr/local/sbin/

 

 

 

 

# sh first.sh  //执行脚本

 

另外一种执行方法

# ./first.sh

# chmod +x first.sh   //修改权限

 

使用sh命令执行一个shell脚本时,可以加-x选项来查看这个脚本的执行过程,这样有利于我们调试这个脚本

 

date用法

date  +%Y :表示以四位数字格式打印年份

date  +%y :表示以两位数字格式打印年份

date  +%m :表示月份

date  +%d :表示日期

date  +%H :表示小时

date  +%M :表示分钟

date  +%S :表示秒

date  +%w :表示星期。结果显示0则表示周日

 

“以四位数字格式打印年份-月份-日期 小时:分钟:秒”

//前一天的日期

 //前一小时

 //前一分钟

Shell脚本中的变量

定义变量的格式为:”变量名=变量的值”。用来解决命令或

路径修改。在脚本中引用变量时需要加上符号¥。

 

本例中使用到了反引号。它的作用是将引号中的字符串当成shell命令执行,返回命令的执行结果。d和d1在脚本中作为变量出现。

查看该脚本的执行结果

 

数学计算

vi sum.sh

  

  //数学计算要用[]括起来,并且前面要加符号¥。 

和用户交互

# vi read.sh

执行过程

 

加上-x选项,再看看这个执行过程

 

Shell脚本预设变量

有时我们会用到类似/etc/init.d/iptables restart的命令,前面的/etc/init.d/iptables文件其实就是个shell脚本。脚本后面为什么可以跟一个restart字符串呢?这就涉及shell脚本的预设变量了。Shell脚本在执行时,后面可以跟一个或者多个参数

# vi option.sh

 

执行结果

 

 

 

¥1和¥2的值就是在执行时分别输入的1和2,¥1就是脚本的第一个参数,¥2是第二个参数。一个shell脚本的预设变量是没有限制的。

另外还有一个¥0,他代表脚本本身的名字。

 

执行结果

 

Shell脚本中的逻辑判断

在shell脚本中,我们可以使用if逻辑判断。

不带else

具体格式

if 判断语句;then

command

fi

示例脚本:

# vi if1.sh

 

((a<60))是shell脚本中特有的格式,只用一个小括号或者不用都会报错。

该脚本的执行结果

 

带有else

if 判断语句;then

command

else

  command

fi

示例脚本

# vi if2.sh

 

执行结果

 

脚本if2.sh和if1.sh的唯一区别是:如果输入大于或等于60的数字会有提示。

带有elif

具体格式:

if 判断语句;then

command

elif 判断语句2;then

  command

else

  command

fi

示例脚本

# vi if3.sh

这里的&&表示”并且”的意思,也可以使用||表示”或者”

 

判断数值大小除了可以使用(())的形式外,还可以使用[].但是不能使用>、<、=这样的符号,要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、

-ne(不等于)。

和文档相关的判断

shell脚本中if还经常用户判断文档属性。比如判断是普通文件还是目录,判断文件是否有读、写、执行权限等。常用选项:

-e:判断文件或目录是否存在

-d:判断是不是目录以及是否存在

-f:判断是不是普通文件以及是否存在

-r:判断是否有读权限

-w:判断是否有写权限

-x:判断是否可执行

Case逻辑判断

具体格式:

case  变量  in

value1)

         command

         ;;

value2)

         command

         ;;

value3)    command

         ;;

*)

          command

          ;;

esac

上面的结构中,不限制value的个数,*代表其他值。

判断输入值是奇数还是偶数的脚本

# vi case.sh

 

脚本中¥a的值为1或0,其执行结果如下

 

case脚本常用于编写系统服务的启动脚本。例如/etc/init.d/network中就有用到。

shell脚本中的循环

常用到for循环和while循环

for循环

for循环结构是运维工作中使用最频繁的循环结构。

 //脚本中的seq1 5表示从1到5的一个序列。

执行结果

 

基本结构:

for  变量名  in  循环的条件; do

command

done //这里的”循环的条件”可以是一组字符串或者数字(用一个或多个空格隔开),也可以是一条命令的执行结果。

 

“循环的条件”还可以引用系统命令的执行结果(如seq1 5),但必须用反括号括起来

 

while 循环

while循环来编写死循环的脚本,用于监控某项服务。

格式:

while  条件;do

       command

done

示例脚本

 

执行结果

 

也可以用一个冒号代替循环条件,这样可以做到死循环

 

Shell脚本中的函数

就是先把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时2直接调用这个小单元的名字即可。

 

执行结果

 

func.sh 中的sum()为自定义的函数,在shell 脚本中函数的格式如下:

function 函数名()

{

   command1

   command2

}

在shell脚本中,函数一定要卸载最前面。不能出现在中间或者最后。

shell 脚本中的终端的继续

break

在脚本中使用它,表示退出该层循环。

# vi break.sh

//本意是要把1-5数值赋予i,当i=3时,会跳出循环,后面的4和5都不会再执行了。

 

continue

continue 也是在使用在循环中的,与break不同的是,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环。

 

执行结果

 

exit

与break、continue类似的用法。直接退出整个shell脚本。

 

执行结果

posted on 2020-01-15 16:04  思远道  阅读(324)  评论(0编辑  收藏  举报