目录
一、参数传递
二、运算符
1、算术运算符(+、-、*、/、%、=、==、!=)
2、关系运算符
3、逻辑运算符
4、字符串运算符
5、文件运算符
一、参数传递
执行脚本时可以为脚本文件传递参数,在脚本中可以处理这些参数。
第n个参数,通过$n获取。下面两个例子表明了对参数的一些常见的使用方法。
[root@VirTrxcx test]# cat var.sh
#! /bin/bash
echo $1 # 获取第一个参数
echo $2 # 获取第二个参数
echo $# # 获取参数个数
echo $* # 获取所有参数
echo $@ # 获取所有参数
echo $? # 获取程序结束状态:0表示正常退出# 传递参数的方法:执行脚本时后面以空格分开参数即可
[root@VirTrxcx test]# ./var.sh "hello,this is parameter1" "parameter2" "parameter3"
hello,this is parameter1
parameter2
3
hello,this is parameter1 parameter2 parameter3
hello,this is parameter1 parameter2 parameter3
0
$*和$@都会获取所有参数,
区别在于$*把获取到的所有参数当成一个整体,而$@把获取到的每个参数当成独立的引用。
# 在这里展示$*和$@的区别,下面会循环输出二者的内容
for i in "$*";doecho $i
donefor i in "$@";doecho $i
done# 在这里设置一个bug
name="Trxcx"
readonly name
unset name
echo $?
[root@VirTrxcx test]# ./var.sh "p1" "p2"
p1 p2
p1
p2
./var.sh: line 14: unset: name: cannot unset: readonly variable
1
二、运算符
1、算术运算符(+、-、*、/、%、=、==、!=)
通过expr实现数学运算
[root@VirTrxcx test]# cat var.sh
#! /bin/bash
a=10
b=20val=`expr $a \* $b + $b`
echo $valif [ $a != $b ]
thenecho "a doesn't equal b"
fi[root@VirTrxcx test]# ./var.sh
220
a doesn't equal b
要点说明:
- Shell编程中有+-*/%等运算符号,但*前面必须加上\转义才能正确使用。
- 运算符和数字(变量)之间应该以空格分隔
- 条件表达式放在[]之间,应该存在空格分隔
2、关系运算符
假设a=10,b=20。
- -eq:是否相等?[ $a -eq $b ] 返回 false。
- -ne:是否不等?[ $a -ne $b ] 返回 true。
类似的:
- -gt是大于
- -lt是小于
- -ge是大于等于
- -le是小于等于
e是equal,g是greater,l是less,n是not,t是than,通过全称可以很容易记住缩写的含义。
3、逻辑运算符
- -a:与运算;-o:或运算;!:非运算。使用方法:[ $a -a $b ]
- &&:与运算;||:或运算。使用方法:[[ $a && $b ]]
4、字符串运算符
- =:字符串相等返回true。例如[ $str1 = $str2 ]。
- !=:字符串不等返回true。例如[ $str1 != $str2 ]。
- -z:字符串长度为0返回true。例如[ -z $str1 ]。
- -n:字符串长度不为0返回true。例如[ -n $str1 ]。
- $:字符串不为空返回true。例如[ $str1 ]。
5、文件运算符
-r、-w、-x:文件是否可读、可写、可执行
-f、-d、-b、-c:文件是否是普通文件、是否是目录、是否是块设备文件、是否是字符设备文件
-s、-e:文件是否为空、文件是否存在
使用方法:[ -r $file ]