Shell脚本
shell脚本的工作方式有两种:
1.交互式:用户输入一条命令就立即执行。
2.批处理:由用户事先编写好一个完整的shell脚本,shell会一次性执行脚本中诸多的命令。
编写简单的shell脚本
使用vim example.sh创建脚本文件,文件名称可以自定义,在文件中编辑如下内容:
#!/bin/bash -- shell脚本固定开头行,#!是用来告诉系统使用哪种shell解释器来执行该脚本,
pwd --要执行的命令
ls -al
使用bash example.sh命令执行脚本,会有如下输出信息:
/opt/bashScript
总用量 4
drwxr-xr-x. 2 root root 24 5月 17 19:19 .
drwxr-xr-x. 3 root root 40 5月 17 18:53 ..
-rwxr--r--. 1 root root 51 5月 17 19:19 example.sh
接收用户参数
在shell脚本中可以设置接受外部参数的变量,
$0:对应脚本文件的名称。
$#:对应总共接受了多个个参数。
$*:对应所有的参数值。
$1,$2,$3:对应每个位置的参数值。
在example.sh 输入如下命令(必须用双引号,单引号解析不出来):
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*"
echo "第一个参数为$1,第二个参数为$2,第三个参数为$3"
执行命令:bash example.sh one two three
输出信息如下:
当前脚本名称为example.sh
总共有3个参数,分别是one two three
第一个参数为one,第二个参数为two,第三个参数为three
判断用户的参数
系统在执行mkdir命令创建目录的时候回判断用户输入的信息,判断目录是否存在,存在就会报错,shell脚本中的条件测试语法可以判断表达式是否成立。成立则返回0,否则返回其他随机数。
测试语句格式 [ 条件表达式 ]
按照测试对象来划分,条件测试语句有四种:
1.文件测试语句
2.逻辑测试语句
3.整数值比较语句
4.字符串比较语句
文件测试所用的参数:
-d :测试文件是否为目录类型
-e :测试文件是否存在
-f :判断是否为一般文件
-r :测试当前用户是否有权限读取
-w :测试当前用户是否有权限写入
-x :测试当前用户是否有权限执行
执行命令[ -d /opt/bashScript ] 判断是否为目录类型,然后通过shell内设的$?变量显示上一个命令的执行后的返回值来进行判断。
[root@linux bashScript]# [ -d /opt/bashScript ]
[root@linux bashScript]# echo $?
0
执行命令[ -f /opt/bashScript ] 判断是否为一般文件,然后通过shell内设的$?变量显示上一个命令的执行后的返回值来进行判断。
[root@linux bashScript]# [ -f /opt/bashScript ]
[root@linux bashScript]# echo $?
1
逻辑语句是对测试结果进行逻辑分析,根据测试结果可以实现不同的效果,shell中逻辑运算符与“&&”表示当前面的命令执行成功后才会执行后面的命令,判断文件是否存在
[ -e /opt/bashScript ] && echo "存在"
[root@linux bashScript]# [ -e /opt/bashScript ] && echo "存在"
存在
逻辑运算符或”||“表示前面的命令执行失败后才会执行后面的命令,判断用户是否是root
[ $USER = root1 ] || echo "user"
[root@linux bashScript]# [ $USER = root1 ] || echo "is root"
is root
整数运算符仅是对数字的操作,不能将数字,字符串与文件等内容一起操作。而且不能直接使用 > ,<,=等这些符号来判断。在linux中这些符号与命令符冲突。
整数比较运算符:
-eq :是否等于
-ne :是否不等于
-gt :是否大于
-lt :是否小于
-le :是否小于或等于
-ge :是否大于或等于
测试10是否大于10
[root@linux bashScript]# [ 10 -eq 10 ]
[root@linux bashScript]# echo $?
0
[root@linux bashScript]# [ 10 -lt 10 ]
[root@linux bashScript]# echo $?
1
字符串比较语句用户判断测试字符串是否为空值,或两个字符串是否相同。经常用来判断某个变量是否未被定义。
字符串比较运算符:
= :比较字符串内容是否相同
!= :比较字符串内容是否不同
-z :判读字符串内容是否为空
[root@linux bashScript]# [ -z $String ]
[root@linux bashScript]# echo $?
0
[root@linux bashScript]# echo $LANG
zh_CN.UTF-8
[root@linux bashScript]# [ $LANG != "en.US" ] && echo 'not en.US'
not en.US