变量测试语句 :用于测试变量是否相等、是否为空、文件类型等。
格式 :text 测试条件 ;测试范围 :整数,字符串,文件
字符串测试:
test str1=str2 测试字符串是否相等
test str1!=str2 测试字符串是否不相等
test str1 测试字符串是否不为空
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空
整数测试:
test int1 -eq int2 测试整数是否相等
test int1 -ge int2 测试int1是否>=int2
test int1 -gt int2 测试int1是否>int2
test int1 -le int2 测试int1是否<=int2
test int1 -it int2 测试int1是否<int2
test int1 -ne int2 测试整数 是否不相等
文件测试:
test -d file 指定文件是否目录
test -f file 指定文件是否常规文件
test -x file 指定文件是否可执行
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -a file 指定文件是否存在
test -s file 文件大小是否非0
变量测试语句一般不单独使用,一般作为if语句的测试条件,如:
if test -d $1 then
...........
fi
变量测试语句可用[]进行简化,如
test -d $1等价于 [-d $1]
多条件if语句书写格式:
if 条件1 then
命令1
elif 条件2 then
命令2
else
命令3
fi
案例:判断apache服务器是否启动:
流程控制语句:用于控制shell程序的流程
exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。 eg:exit 0
多个条件的联合:
-a:逻辑与,仅当两个条件都成立时,结果为真。
-o:逻辑或,两个条件只要一个成立,结果为真。
for...done语句
格式:for 变量 in 名字表
do
命令列表
done
拓展:
awk命令应用
awk -F域分隔符“命令” eg: -F: 表示指定:为分隔符
示例:
1.检测系统中UID为0的用户
awk -F: '$3==0 {print $1}' /etc/passwd
2.检测系统中密码为空的用户
awk -F:' length($2)==0 {print $1}' /etc/shadow
select 变量in关键字
do
command 1
..........
command 2
done
select把关键字中的每一项做成类似表单,一交互的方式执行do和done之间的命令。
case...esac语句,格式:
case 变量 in
字符串1) 命令列表1
.....................
.....................
字符串n) 命令列表n
.....................
.....................
esac
while语句,格式:
while 条件
do
命令
done
until语句,格式:
util 条件
do
命令
done
until类似while循环,不同的是until是条件返回值为假是才继续执行。
跳出循环:break和continue
break:跳出整个循环
continue:跳出本次循环,进行下一次循环
shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$#的值减1,
用于分别处理每个参数,移出去的参数不可再用。
函数的应用
函数的定义:
函数名(){
命令序列
}
函数的调用:不带()
函数名 参数1 参数2........
函数中的变量:变量均为全局变量,没有局部变量
函数中的参数: 调用函数时,可以传递参数,在函数中要用$1、$2....来引用
Shell脚本调试
sh -x script :这将执行该脚本并显示所有变量的值。
sh -n script :不执行脚本只是检查与法的模式,将返回所有语法错误。
如果想让普通用户对脚本能够修改,需要有那些权限
如果需要该用户使用sh执行此脚本的时候,只需要赋予普通用户对脚本有r权限,对所在目录有rx权限
如果需要该用户直接敲绝对路径执行此脚本的话,那么需要赋予普通用户对脚本有rx权限,对脚本目录有rx权限