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:是否存在

原文地址:https://www.cnblogs.com/workingdiary/p/6806612.html