1、$#:表示执行脚本或函数传入参数的个数,加上变量${#v}表示变量v的长度
2、$*:表示执行脚本传入参数的列表(不包括$0)
3、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
4、$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
5、$@:表示执行脚本传入参数的所有个数(不包括$0)
6、$0:表示执行的脚本名称
7、$1:表示第一个参数
8、$2:表示第二个参数
9、$?:表示上条命令或整个脚本执行的状态,0表示正常,其他表示错误
10、$[expression]:使用 []对表达式expression进行求值,与命令expr不同的是:[ ] 用于插值,则 expr 用于将值进行输出。
总结:
${#v}
获取变量字符串v的长度# 单引号 '' 括起来的字符串不会进行插值,并使用 $# 获取脚本或函数参数的个数
echo 'echo $#' > ping.sh
sh ping.sh 1 2 3
# 上面脚本的结果为:3
# 使用${#}获取变量字符串长度
s=helloworld
echo "s.length = ${#s}"
# 输出结果是:s.length = 10
# 使用 $(函数名) 执行并获取命令的输出内容,并赋值给变量
echo `date`
2016年 06月 05日 星期日 12:39:08 CST
echo $(date)
2016年 06月 05日 星期日 12:39:34 CST
echo $[1024 + 2048]
# 结果为:3072
expr 1024 + 2048
# 结果为:3072
a=1024
b=2048
echo $[ a + b ]
# 结果为:3072
假设我们定义了一个变量file=/dir1/dir2/dir3/my.file.txt,使用${ }分别替换,得到不同的变量值:
file=${file#*/},删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
file=${file##*/},删掉最后一个 / 及其左边的字符串:my.file.txt
file=${file#*.},删掉第一个 . 及其左边的字符串:file.txt
file=${file##*.},删掉最后一个 . 及其左边的字符串:txt
file=${file%/*},删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
file=${file%%/*},删掉第一个 / 及其右边的字符串:(空值)
file=${file%.*},删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
file=${file%%.*},删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
# 是去掉左边(键盘上#在 $ 的左边)
% 是去掉右边(键盘上% 在$ 的右边)
单一个上面的符号是最小匹配
两个上面的符号是最大匹配
在shell脚本中,if表达式对文件判断时,文件前面的-d、-e、-f、-L、-r、-x
等表示什么意思呢?
-e filename # e即exist,表示如果filename存在,则为真
-d filename # d即dictionary,表示如果filename为目录,则为真
-f filename # f即file,表示如果filename为常规文件,则为真
-L filename # L即symbolic links,表示符号链接,如果 filename为符号链接,则为真
-r filename # r即readable,如果 filename可读,则为真
-w filename # w即writable,如果 filename可写,则为真
-x filename # x即executable,如果 filename可执行,则为真
-s filename # 如果文件长度不为0,则为真
-h filename # 如果文件是软链接,则为真
filename1 -nt filename2 # newer than,如果 filename1比 filename2新,则为真。
filename1 -ot filename2 # older than,如果 filename1比 filename2旧,则为真。
在shell中,数字型变量与字符型变量表达式之间的判断是不同的。使用eq、ne
表示数字型变量之间是否相等,而使用=、!=
进行字符串变量之间关系的判断。
-eq # equal,等于
-ne # not equal,不等于
-gt # greater,大于
-ge # greater than or equal,大于等于
-lt # less than,小于
-le # less than or equal,小于等于
在shell脚本中,if表达式对字符串判断时,文件前面的-n、-z
等又表示什么意思呢?
If [ $a = $b ] # 表示如果字符串string1等于string2,则为真
if [ $string1 != $string2 ] # 如果string1不等于string2,则为真
if [ -n $string ] # 如果string 非空(非0),则为真
if [ -z $string ] # 如果string 为空(或0),则为真
if [ $sting ] # 如果string 非空,返回0 (和-n类似)
PS:字符串允许使用赋值号=
做等号,而不是==
。
在shell中,逻辑非使用!
表示。
if [ ! 表达式 ]
if [ ! -d $num ] # 如果不存在目录$num
在shell中,逻辑与使用-a
表示,a即and。
if [ 表达式1 -a 表达式2 ]
在shell中,逻辑或使用-o
表示,o即or。
if [ 表达式1 –o 表达式2 ]