目录
df -h |grep boot|awk '{print $5}'|tr -d %
test | 作用 |
---|---|
-d | 测试是否为目录 |
-e | 测试文件是否存在,不分文件和目录 |
-a | 测试目录或文件是否存在,有 bug 不建议使用 |
-f | 测试是否为文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
-l | 检测是否为软连接文件 |
—— 格式:[ 整数1 -选项 整数2 ] 公式
选项 | 作用 |
---|---|
-eq | 第一个数 等于(Equal) 第二个数 |
-ne | 第一个数 不等于(Not Equal) 第二个数 |
-gt | 第一个数 大于(Greater Than) 第二个数 |
-lt | 第一个数 小于(Lesser Than) 第二个数 |
-le | 第一个数 小于或等于(Lesser or Equal) 第二个数 |
-ge | 第一个数 大于或等于(Greater or Equal) 第二个数 |
符号 | 格式 | 作用 |
---|---|---|
= | [ 字符串1 = 字符串2 ] | 字符串内容相同 |
!= | [ 字符串1 != 字符串2 ] | 字符串内容不同,!号表示取反 |
-z | [ -z 字符串 ] | 字符串内容为空 |
-n | [ -n 字符串 ] | 字符是否存在 |
- [root@localhost ~]# text1=yuan #定义 text1
- [root@localhost ~]# text2=shen #定义 text2
-
- #因为二者不同,此举是比较相同字符串,所以命令错误,显示为 1
- [root@localhost ~]# [ $text1 = $text2 ];echo $?
- 1 #正确则显示 0 ,反之为错误输出
- #因为二者不同,此举是比较不同字符串,所以命令正确,显示为 0
- [root@localhost ~]# [ $text1 != $text2 ];echo $?
- 0
-
- [root@localhost ~]# text3= #定义 text3,不输入内容
- #因为 text3 没有内容,此举是查看字符串内容为空
- [root@localhost ~]# [ -z $text3 ];echo $?
- 0
- [root@localhost ~]# [ -z $text2 ];echo $?
- 1
—— 格式:[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
选项 | 注释 |
---|---|
-a 或 && | 逻辑与,表示且的意思 |
-o 或 || | 逻辑或,表示或的意思 |
! | 逻辑否,取反 |
短路与 &&
全真才为真
一假即为假
—— 例:命令1 操作符 命令2 / [ 表达式1 ] 操作符 [ 表达式2 ]
其中一个错则不执行,必须两个都是正确的才能执行
短路或 ||
一真即为真
全假才为假
—— 例:命令1 操作符 命令2 / [ 表达式1 ] 操作符 [ 表达式2 ]
其中一个正确的就可以执行,必须两个都错才不执行
先 短路与 后 短路或
—— 只有这一种组合写法
- #上一条命令执行成功
- [root@localhost opt]# echo $?
- 0
- #等于0,执行成功,所以直接显示且(&&)后面的内容
- [root@localhost opt]# [ $? -eq 0 ] && echo "成功" || echo "失败"
- 成功
- #不大于0,执行失败,所以直接显示或(||)后面的内容
- [root@localhost opt]# [ $? -gt 0 ] && echo "成功" || echo "失败"
- 失败
—— [[ ]] 加强版的单个 [ ] ,可以支持正则表达式和通配符(字符)
[[ ]] 用法
[[ == ]] :左侧字符串是否和右侧的 pattern 相同
右侧接通配符
[[ =~ ]] :左侧字符串是否能够被右侧的正则表达式的 pattern 所匹配
右侧接正则表达式
[[ != ]] :取反
- [root@localhost opt]# q=text.log
-
- [root@localhost opt]# [[ "$q" == *.log ]] ;echo $?
- 0
- [root@localhost opt]# [[ "$q" != *.log ]] ;echo $?
- 1
- [root@localhost opt]# [[ "$q" =~ *.log ]] ;echo $?
- 2
-
- [root@localhost ~]# w=text.sh
-
- [root@localhost ~]# [[ "$w" =~ sh$ ]];echo $?
- 0
- [root@localhost ~]# [[ "$w" =~ *.sh ]];echo $?
- 2
- [root@localhost ~]# [[ "$w" =~ *.sh$ ]];echo $?
- 2
—— 作用:二者都可以将多个命令组合在一起,批量执行
—— ( ) :会开启子 shell
—— { }:不会开启子shell
- #单分支
-
- if 判断条件
- then
- 条件为真的分支代码 #当判断条件成立,执行一跳或多条命令
- fi #结尾
-
-
- #双分支
-
- if 判断条件
- then
- 条件为真的分支代码 #当条件判断成立时,可以执行一条或多条命令
- else
- 条件为假的分支代码 #当条件判断不成立时,可以执行一条或多条命令
- fi
-
-
- #多分支
-
- if 判断条件1
- then
- 条件1为真的分支代码
- elif 判断条件2
- then
- 条件2为真的分支代码
- elif 判断条件3
- then
- 条件3为真的分支代码
-
- ......
- else
- 以上条件都为假的分支代码 #托底,当上述都不成立,执行一条或多条命令
-
-
- #格式
-
- case 变量名称 in
- 模式1)
- 命令序列
- ;;
- 模式2)
- 命令序列
- ;;
-
- .
- .
- .
-
- *) #不包含第一个变量内容与第二个变量内容的其他程序执行段
- 默认程序段
- ;;
- esac #结尾
-
- #注意
- 模式字符串中,可以用方括号表示一个连续的范围,如 "[0-9]";还可以使用竖杠 | 表示或,比如 a|b
- 最后的“)”表示默认模式,其中的相当于通配符
-
- #!/bin/bash
- read -p "请输入yes/no:" yn
- yn=`echo $yn|tr 'A-Z' 'a-z'` #无论 yes 或 no 怎么输入,都能识别;YeS On
- case $yn in
- yes|y)
- echo "识别为yes"
- ;;
- no|n)
- echo "识别为no"
- ;;
-
- *)
- echo "无法识别,重新输入"
- bash $0
- ;;
- esac
-
- #!/bin/bash
- use=`df -h|grep boot|awk '{print $5}'|tr -d %`
-
- [ $use -gt 80 ] && echo "磁盘使用过高"||echo "磁盘使用正常"
-
-
- #!/bin/bash
- read -p "告诉我你要新建用户的名字:" name
-
- grep -q $name /etc/passwd
- if [ $? -eq 0 ]
- then
- echo "该用户已经存在了"
- exit
- else
- useradd $name
- pass=`cat /dev/random |tr -dc [[:alnum:]] |head -c 12`
- #进入到随机生成字符的文件中,并且删除所有的特殊符号,打印前 12 个字符
- echo $pass |passwd $name --stdin
- #将 $pass 执行的标准输出的结果,标准输入到 $name 定义的用户的 passwd 命令中,为该用户的密码
- echo $pass >> /opt/mima.txt
- #在 /opt 目录下新建文件 mima.txt 并将打印出来的前 12 个字符保存其中
- fi
-
-
—— 限制范围 1到 3
—— -W(大写):超过时间,默认单位秒
—— -w :多少秒后停止 ping 操作
—— -c :发送包的个数
—— -i :发送的间隔时间
- 例
- $1=192.168.88.1 #定义 IP
-
- ping -c 3 -i 0.5 -W2 $1 &> /dev/null && echo "$1 online" || echo "$1 off"
- #ping $1 定义的 IP 次数 3 次,发送间隔时间为 0.5秒,超时 2秒 并将标准输出的信息放入垃圾箱,ping 成功显示 online ,失败则显示 off
- #注意 W 为大写
—— 命令可以开启 2 个任务同时运行,并行构建大大加快构建速度
—— awk :是一种文本处理工具,它可以用于从文件或标准输入中提取和操作数据。它以行为单位读取输入,并根据指定的规则进行处理
—— print $5 :压缩空格,默认打印第五列
—— 悄悄的执行命令,不显示
—— 判断当前用户是否为管理员
格式:选项 文件名 | 作用 |
---|---|
-e | 如果文件存在,则为真 |
-d | 如果文件为目录,则为真 |
-f | 如果文件为常规文件,则为真 |
-L | 如果文件为符号连接,则为真 |
-r | 如果文件可读,则为真 |
-w | 如果文件可写,则为真 |
-x | 如果文件可执行,则为真 |
-s | 如果文件长度不为0,则为真 |
-h | 如果文件是软链接,则为真 |
例