Shell脚本(二)
摘自:菜鸟教程 http://www.runoob.com/linux/linux-shell-passing-arguments.html
关于SGID/SUID的内容摘自:http://blog.csdn.net/xiaocainiaoshangxiao/article/details/17378611
1. Shell传递参数
./test.sh 1 2 3
1)获取第n个参数:$n,其中$0为执行的文件名
echo $0 输出:test.sh
2)参数个数:$#
echo $# 输出:3
3)以一个字符串显示所有参数:$*
“$*” 表示:"1 2 3"
4)与$*相同,但加双引号时返回不同:$@
"$@" 表示:"1" "2" "3"
5)脚本运行的当前进程号:$$
如:10786
6)后台运行的最后一个进程号:$!
7)显示Shell使用的当前选项:$-,同set命令
8)显示最后命令的退出状态:$?
0表示没有错误,其他表示有错误
2. Shell基本运算符
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。如:
val=`expr 2+2` 结果:4
算数运算符
+:加
-:减
*:乘,注意表达式中*需要做转义,如`expr a \* b`
/:除
%:取余
=:赋值,如a=$b
==:判断是否相等,如[ $a==$b ]
!=:判断是否不等,如[ $a!=$b ],注意条件表达式与中括号之间一定要有空格。
关系运算符
只支持数字,不支持字符串
-eq:是否相等
-ne:是否不想等
-gt:左边是否大于右边
-lt:左边是否小于右边
-ge:左边是否大于等于右边
-le:左边是否小于等于右边
布尔运算符
!:非运算
-o:或运算
-a:与运算
逻辑运算符
a=10,b=20
&&:逻辑与,如[[ $a -lt 100 && $b -gt 100 ]],返回false
||:逻辑或,如[[ $a -lt 100 || $b -gt 100 ]],返回true
字符串运算符:
a="abc", b="efg"
=:字符串是否相等,如[ $a = $b ]返回true
!=:是否不相等,如[ $a != $b ]返回false
-z:长度是否为0,如[ -z $a ]返回false
-n:长度是否不为0,如[ -n $a ]返回true
str:是否为空,如[ $a ]返回false
文件测试运算符:
-b file:文件是否是块设备文件
-c file:是否是字符设备文件
-d file:是否是目录
-f file:是否是普通文件
-g file:是否设置了SGID位(SGID即Set GID的缩写,它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用 SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。)
-k file:是否设置了粘着位(普通文件的sticky位会被linux内核忽略,目录的sticky位表示这个目录里的文件只能被owner和root删除)
-p file:是否是有名管道(管道:http://mt.sohu.com/20161122/n473787762.shtml)
-u file:是否设置了SUID位(SUID是Set UID的简称,翻译过来是设置用户ID,感觉很别扭,还是觉得SUID最为简炼。它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。)
-r file:是否可读
-w file:是否可写
-x file:是否可执行
-s file:是否为空(文件大小是否大于0)
-e file:是否存在