shell逻辑判断
(1)字符串操作符 用于计算字符串表达式
test命令 | 含义
-----------------------------------------
Str1 = str2 | 当str1与str2相同时,返回True
Str1! = str2| 当str1与str2不同时,返回True
Str | 当str不是空字符时,返回True
-n str | 当str的长度大于0时,返回True
-z str | 当str的长度是0时,返回True
-----------------------------------------
(2)整数操作符具有和字符操作符类似的功能.只是他们的操作是针对整数
test表达式 | 含义
---------------------------------------------
Int1 -eq int2|当int1等于int2时,返回True
Int1 -ge int2|当int1大于/等于int2时,返回True
Int1 -le int2|当int1小于/等于int2时,返回True
Int1 -gt int2|当int1大于int2时,返回True
Int1 -ne int2|当int1不等于int2时,返回True
-----------------------------------------
(3)用于文件操作的操作符,他们能检查:文件是否存在,文件类型等
test表达式 | 含义
------------------------------------------------
-d file |当file是一个目录时,返回 True
-f file |当file是一个普通文件时,返回 True
-r file |当file是一个刻读文件时,返回 True
-s file |当file文件长度大于0时,返回 True
-w file |当file是一个可写文件时,返回 True
-x file |当file是一个可执行文件时,返回 True
------------------------------------------------
(4)shell的逻辑操作符用于修饰/连接包含整数,字符串,文件操作符的表达式
test表达式 | 含义
----------------------------------------------------------
! expr |当expr的值是False时,返回True
Expr1 -a expr2|当expr1,expr2值同为True时,返回True
Expr1 -o expr2|当expr1,expr2的值至少有一个为True时,返回True
-----------------------------------------------------------
注意:
tcsh shell 不使用test命令,但是tcsh中的表达式同样能承担相同的功能.tcsh
支持的表达式于C中的表达式相同.通常使用在if和while命令中.
tcsh表达式 | 含义
-------------------------------------------------------
Int1 <= int2 |当int1小于/等于int2时,返回True
Int1 >= int2 |当int1大于/等于int2时,返回True
Int1 < int2 |当int1小于int2时,返回True
Int1 > int2 |当int1大于int2时,返回True
Str1 == str2 |当str1与str2相同时,返回True
Str1 != str2 |当str1与str2不同时,返回True
-r file |当file是一个可读文件时,返回True
-w file |当file是一个可写文件时,返回True
-x file |当file是一个可执行文件时,返回True
-e file |当file存在时,返回True
-o file |当file文件的所有者是当前用户时,返回True
-z file |当file长度为0时,返回True
-f file |当file是一个普通文件时,返回True
-d file |当file是一个目录时,返回True
Exp1 || exp2 |当exp1和exp2的值至少一个为True时,返回True
Exp1 && exp2 |当exp1和exp2的值同为True时,返回True
! exp |当exp的值为False时,返回True
内置变量
1.$BASH Bash的二进制程序文件的路径(脚本解释器的路径)
2.$FUNCNAME 当前函数的名字
3.$IFS 内部域分隔符,这个变量用来决定 Bash 在解释字符串时如何识别域,或者单词边界。$IFS默认为空白(空格,制表符,和换行符),但这是可以修改的,比如,在分析逗号分隔的数据文件时,就可以设置为逗号,注意 $* 使用的是保存在$IFS中的第一个字符。
4.$REPLY 当没有参数变量提供给 read 命令的时候,这个变量会作为默认变量提供给 read 命令。也可以用于 select 菜单,但是只提供所选择变量的编号,而不是变量本身的值。在个别版本的bash中,并不支持内置变量$REPLY。
5.通过$*和$@列出所有的参数
"$*" 所有的位置参数都被看作为一个单词。
$@与 $* 相同,但是每个参数都是一个独立的引用字符串,这就意味着,参数是被完整
传递的,并没有被解释或扩展。这也意味着,参数列表中每个参数都被看作为单独的单词。
操作字符串
${#parameter} 输出变量长度
${parameter-default} 如果变量 parameter 没被声明,那么就使用默认值。
${parameter:-default} 如果变量 parameter 没被设置,那么就使用默认值。
${parameter=default} 如果变量parameter没声明,那么就把它的值设为default。
${parameter:=default} 如果变量parameter没设置,那么就把它的值设为default。
${parameter+alt_value} 如果变量parameter被声明了,那么就使用alt_value,否则就使用null字符串。
${parameter:+alt_value} 如果变量parameter被设置了,那么就使用alt_value,否则就使用null字符串。
${parameter?err_msg} 如果parameter已经被声明,那么就使用设置的值,否则打印err_msg错误消息。
${parameter:?err_msg} 如果parameter已经被设置,那么就使用设置的值,否则打印err_msg错误消息。
${var:pos} 变量var从位置pos开始扩展, 也就是pos之前的字符都丢弃。
${var:pos:len} 变量var从位置pos开始,并扩展len个字符。
${var/Pattern/Replacement} 使用Replacement来替换变量var中第一个匹配Pattern的字符串。
${var//Pattern/Replacement} 全局替换。所有在变量var匹配Pattern的字符串,都会被替换为Replacement。
${var/#Pattern/Replacement} 如果变量var的前缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串。
${var/%Pattern/Replacement} 如果变量var的后缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串。
1、env显示当前的环境变量
2、PS1='[u@h w A] $' 可以设置bash的命令与提示符。
3、echo $$ 显示当前bash的PID号
4、echo $?显示上一条指令的回传值(指令成功回传值为0,其他为非零)
5、unset name 取消变量的定义
6、定义变量语法: 变量名=变量值
[注]:等号两边不能留空格,否则代表变量包含空格;若变量本身就包含空格,则整个字符串都要用双引号括起来。
7、引用变量:$变量名 ${变量名}(强调变量)
为了区分变量名与命令名,建议所有的变量名都用大写字母表示
8、export命令可以将一个局部变量提供给shell执行的其他命令使用:
export 变量名
export 变量名=变量值
9、内部变量
$?:命令执行后返回的状态(0为正确执行;非0为出错) 可用于检查上一个命令执行是否正确
$$:当前进程的进程号
$!:最近后台进程号
$#:位置参数的数量,$1表示第一个自变量
$0:当前执行的进程名
$1-$9:脚本参数
$*:所有位置参数的内容
10、条件测试:
–格式:test conditions 也可以写作 [ conditions ]
test在以下4种情况下使用:
–字符比较
–两个数值的比较
–文件操作,例如文件是否存在及文件的状态等
–逻辑操作,可以进行and/or,与其他条件联合使用
test用于计算一个条件表达式的值,经常在条件语句和循环语句中用来判断某些条件是否满足,可以使用很多shell的内部操作符。
11、字符串操作符
常用字符串属性条件判断
string_1=string_2
如果string_1和string_2两个字符串相等则返回真,否则返回假;
string_1!= string_2
如果string_1和string_2两个字符串不相等则返回真,否则返回假;
-z string
如果字符串string的长度为0则返回真,否则返回假;
-n string
如果字符串string长度不为0则返回真,否则返回假;
string
如果字符串string非空返回真,否则返回假。
通常与test结合使用,如:
#!?bin/bash
string_1=a string_2=b
test string_1 = string_2
echo $?
运行应该返回 1
12、整数操作符:计算整数表达式
常用的整数关系条件判断
mum_1 –eq num_2
如果num_1和num_2相等则返回真,否则返回假;
mum_1 –ne num_2
如果num_1不等于num_2则返回真,否则返回假;
mum_1 –gt num_2
如果num_1大于num_2则返回真,否则返回假;
mum_1 –lt num_2
如果num_1小于num_2则返回真,否则返回假;
mum_1 –le num_2
如果num_1小于等于num_2则返回真,否则返回假;
mum_1 –ge num_2
如果num_1大于等于num_2则返回真,否则返回假;
13、文件操作符
常用的文件属性条件判断
-f fn
如果fn存在且fn为普通文件则返回真,否则返回假。
-b fn
如果fn存在且fn为块设备则返回真,否则返回假。
-e fn
如果fn存在则返回真,否则返回假。
-d fn
如果fn 存在且fn为目录则返回真,否则返回假。
-r fn
如果fn存在且fn可读则返回真,否则返回假。
-w fn
如果fn存在且fn可写则返回真,否则返回假。
-x fn
如果fn存在且fn可执行则返回真,否则返回假。
-O fn
如果fn存在且被当前用户拥有则返回真,否则返回假。
-L fn
如果fn存在且fn为符号链接则返回真,否则返回假。
14、逻辑操作符
常用的逻辑操作符属性条件判断
-a (逻辑与)格式为”condition1 –a condition2”,若两个条件都为真,则结果为真
-o (逻辑或):格式为”condition1 –o condition2”,若两个条件中有一个为真,则结果为真
! (逻辑非):格式为”!condition”.当condition为真时,结果为假,当condition为假时,结果为真
15、shell中的引号:
1、单引号(‘):单引号括起来的字符(包括特殊字符)都作为普通字符。
2、双引号:由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能,其余字符仍作为普通字符对待。
[注]:
$:用其后指定的变量值来代替这个变量
:转义字符,其后面的字符为普通字符。通常需要加的只有4个字符, $、、’、和”。
对于”号,如果没加,则与前一个“号匹配
3、反引号(`): 与键盘上的~同一个键上的符号。反引号括起来的字符串被shell解释为命令行,执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号部分。
16、通配符
*:代表任何字符串。例:f*匹配以f打头的任意字符串。
文件名前的圆点(.)和路径名中的的斜线(/)必须显式匹配。
例:”*”不能匹配.file,只有”.*”才可以匹配.file。
?:代表任何单个字符。
[ ]:代表指定的一个字符范围,只要文件名中[ ]位置处的字符在[ ]中指定的范围之内,那么这个文件名就与这个模式串匹配。
17、调试执行 sh -x abc.sh 调试执行abc.sh 。sh -n abc.sh 不执行脚本,只检测语法错误。
18、exit 退出程序执行。正常退出,返回值为0;非0表示非正常退出。例如:exit 0
19、awk命令文件内容提取 例如:检测提取root用户 awk -F: '$3==0 {print $1}' /etc/passwd 其中-F更改分隔符
20、sh执行脚本的权限:对脚本有-r的权限,并且对脚本所在目录有-rx权限。
直接执行脚本的权限:对脚本有-rx的权限,并且对脚本所在目录有-rx权限