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脚本。
执行结果