一、条件测试:(与echo %?联用)
①、test EXPRESSION test -V NAME <==> [ -v NAME] 判断变量是否被定义过。“”空也算被定义过
②、[ EXPRESSION ]
③、[[ EXPRESSION ]] (支持通配符与正则表达式)
二、数值测试:
-gt >
-ge >=
-eq =
-ne !=
-lt <
-le <=
三、字符串测试:
-z 判断是否为空(“”也算空)
-n 判断是否为不空
= [ "$str1" = "$str2" ]
> ascii的比较
< sacii的比较
!= 支持通配符 [[ "$str1" != *.log ]]
== 支持通配符 [[ "$str1" == *.log ]]
=~ 支持正则表达式 [[ "str1" =~ \.log$ ]] 判断是否为数字:[[ "$N" =~ ^[0-9]+$ ]]
四、文件测试:
-e <==> -a 是否存在
-b
-c
-f
-d
-s
-p
-L <==> -h
五、权限测试:
-r
-w
-x
-u suid
-g sgid
-k sticky
六、组合测试:
[ EXPRESSION -a EXPRESSION] 并且(and)
[ EXPRESSION -o EXPRESSION] 或者(or)
[ ! EXPRESSION] 取反
&& 短路与。如果为真,则继续执行
|| 短路或。如果为假,则继续执行
! 取反
例如:[ $[$RANDOM%6] -eq 0 ] && rm -rf / ||echo "luck"
():使用变量、命令是会有自己的shell,所以(exit)退出的()的shell。 |其实也是两边各有各自的shell
{}:使用变量、命令是当前用户shell。
故在脚本中,使用()中的exit不退出脚本shell。{}会退出脚本。所以用()可以做临时测试。
例如临时脚本:
#!/bin/bash ip=10.0.0.1 ping -c1 -w1 $ip &> /dev/null && echo "ip is up"||{ echo "ip is unreachable";exit;} echo "script is finished"
不允许普通客户登陆:echo "Deny common user log > /etc/nologin"
允许登陆:rm -rf /etc/nologin
read:默认将变量放入$REPLYA。别于|联用,因为|也会生成各自的shell。 例如:echo "mage" |{ read name;echo $name;}; echo $mage 此命令结束后name并不是magedu
test -p "请输入xxx" name
例如:鸡兔同笼脚本:
#!/bin/bash # #************************************************************* #Author: ldy #QQ: 8888888888 #Date: 2020-04-23 #FileName: jitu_Problem.sh #URL: http://www.lidyeyuan.com #Description: The test script #Copyright (C): 2020 All rights reserved #************************************************************* read -p "请输入头的数量:" head read -p "请输入脚的数量:" foot rabbit=$[ foot/2-head ] chook=$[ head-rabbit ] echo "兔子:$rabbit" echo "鸡:$chook"
配置文件:
全局配置:/etc/profile.d
/etc/profile
/etc/bashrc
个人配置:~/bash_profile
~/.bashrc
登陆:
交互式:命令行终端登陆。
su - username
配置文件执行顺序:/etc/profile>/etc/profile.d/*.sh>~/.bash_profile>~/.bashrc>/etc/bashrc
非交互式:图形界面打开终端
su username
执行脚本
任何其他bash实例
配置文件执行顺序:/etc/profile.d/*.sh>/etc/bashrc>~/.bashrc
功能划分:profile类和bashrc类
profile类:
为交互式登陆的shell提供配置
功能:定义环境变量
运行命令或脚本
bashrc类:
为交互式和非交互登陆的shell提供配置
功能:定义别名、函数
定义本地变量
修改这两类文件后需使之生效。
~/.bash_logout:但系统退出时,自动运行某些命令:如在里面添加rm -rf /data/test