1.1.1创建与编写
Shell脚本通常都以.sh为后缀。第一行内容表示使用bash语法,更加规范。#后面跟一些时间日期版本。
查看
另一种方式
使用该方法需要脚本本身具有执行权限,所以给脚本加一个x
使用sh时,可以加-x查看这个脚本的执行过程。
1.1.2 date命令
date +%Y: 表示以四位数字格式打印年份。
date +%y:表示以两位数字格式打印年份。
date +%m: 表示月份。
date +%d: 表示日期。
date +%H:表示小时。
date +%M: 表示分钟。
date +%S: 表示秒。
date +%w: 表示星期。结果显示o则表示周日。
1.2Shell脚本中的变量
1.2.1 数学运算
示例
数学计算要用[ ]括起来,并在前面加$ 结果为
1.2.2 和用户交互
read命令用于和用户交互,他把用户输入的字符串作为变量值。结果为
加上-x查看整个执行过程
1.2.3 shell脚本预设变量
在脚本后面跟的参数就是预设变量
$1代表第一个参数$2代表第二个,给shell脚本的预设变量是没有限制的
1.3shell脚本中的逻辑判断
1.3.1 不带else
示例
(())时shell中特有的格式,只用一个或者不用都会报错。 结果:
1.3.2 带有else
示例
结果
1.3.3 带有elif
示例
结果
判断数值大小可以用(())外还可以用[ ]但是不能用<> =,要使用是不能使用>、<、=这样的符号了,要使用-lt (小于)-gt (大于)、-le (小于或等于)、-ge (大于或等于) -eq(等于)、-ne (不等于) 示例
If中使用&&和||的情况
1.3.4 和文档相关的判断
shell脚本中if还经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否有读,写,执行权限等。if常用的选项有以下几个。
-e:判断文件或目录是否存在。
-d:判断是不是目录以及是否存在。
-f: 判断是不是普通文件以及是否存在。
-r:判断是否有读权限。
-w: 判断是否有写权限。
-x:判断是否可执行。
示例:
因为/home是目录非文件所以不会显示ok。
1.3.5 case逻辑判断
不限制个数 *代表其他数
脚本为1,0时结果为
case常用来编写系统服务的启动脚本。
1.4 shell脚本中的循环
1.4.1 for循环
结果 seq 1 5 表示一到五的序列
for 循环的基本结构格式
for 变量名 in 循环的条件; do
command
done
这里“循环的条件”可以是一组字符串或者数字(用一-个或者多个空格隔开) ,也可以是一条命
令的执行结果。如:
循环的条件还可以引用系统的命令的执行结果,但必须用反引号括起来。示例:
1.4.2 while循环
常用while编写死循环的脚本,用于监控某项服务。格式
while 条件; do
command
done
示例:
结果
另外还可以用一个冒号代替循环条件,这样就可以做到死循环。
While :; do
command
sleep 3
done
1.5 shell脚本中的函数
shell脚本中的函数就是先把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代码总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样不仅节省时间还节省空间。示例
结果:
值得注意的是,在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后。因为函数是要被调用的,如果还没有出现就被调用,肯定会出错。
1.6 shell 脚本中的中断和继续
1.6.1 break
break用在循环中,不管是for或者while都可以。在脚本中使用它,表示退出该层循环。之所以说层,是因为有时我们会用到嵌套循环,大循环里面还有小循环,而break仅仅是退出那一-层循环,它的上层循环不受影响。示例
脚本意思是要把一到五数值赋予i,当i等于3是,会跳出循环,4,5不再执行。结果
1.6.2 continue
continue也是使用在循环中的,但和break不同的是,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环。具体示例如下:
结果
当i等于3的时候,出现了continue,所以结束本次循环,continue后面的语句不再执行,继续下一次循环。
1.6.3 exit
其实,还有一个和break. continue类 似的用法,那就是exit, 它的作用范围更大,直接退出整个shell脚本。 示例脚本如下:
结果
直接结束。