Shell基础(五):条件判断与流程控制
来源:互联网 发布:无间道刘建明知乎 编辑:程序博客网 时间:2024/05/18 13:42
一、条件判断
格式:test [选项] file
或者 [(空格)条件判断式(空格)] 注:不要忘记空格
1、按文件类型进行判断
选项:-d:判断文件是否存在,且是目录文件时为真
-e:判断文件是否存在,存在时为真
-f:判断文件是否为真,且为普通文件时为真
-b:判断文件是否存在,且为块设备文件时为真
-c:判断文件是否存在,且为字符设备时为真
-L:判断文件是否存在,且为符号链接文件时为真
-p:判断文件是否存在,且为管道文件时为真
-s:判断文件是否为非空,非空时为真
-S:判断套接字文件是否存在,存在时为真
例:[-e filename] 执行命令后echo $?查看若值为0说明执行正确,文件存在
[-e filename] && echo yes || echo no
2、按文件权限进行判断
-r:拥有读权限时为真
-w:拥有写权限时为真
-x:拥有执行权限时为真
-u: 有SUID权限时为真
-g:有SGID权限时为真
-k:有SBit权限时为真
3、两个文件间比较
文件1 -nt 文件2 判断文件1是否比文件2新,若新则为真
文件1 -ot 文件2 判断文件1是否比文件2旧,若旧则为真
文件1 -ef 文件2 判断文件1iNode节点号是否和文件2相同,(可用此判断硬链接)
4、两个整数间比较
整数1 -eq 整数2 判断是否相等
整数1 -ne 整数2 判断是否不相等
整数1 -gt 整数2 判断是否大于
整数1 -ge 整数2 判断是否大于等于
整数1 -lt 整数2 判断是否小于
整数1 -le 整数2 判断是否小于等于
5、字符串的判断
-z 字符串 判断字符串是否为空
-n 字符串 判断字符串是否为非空
字符串1 == 字符串2 判断是否相等
字符串1 != 字符串2 判断是否不等
例:[ -z "$name"] $$ echo yes || echo no
6、多重条件判断
判断1 -a 判断2 逻辑与,1和2都为真最终结果才为真
判断1 -o 判断2 逻辑或,1和2有一个为真结果就为真
!判断 逻辑非
二、流程控制
1、单分支if语句
if [ 条件判断式 ];then
程序
fi
或者:if [ 条件判断式 ]
then
程序
fi
例程:判断当前用户是root
#!/bin/bashtest=$(env | grep USER | cut -d ":" -f2)if ["$test" == "root"] then echo current user is rootfi例程:判断分区使用率
#!/bin/bashtest=$(df -h | grep /dev/sda5 | awk '{print $5}' | cut -d "%" -f1)if [ $test -ge 80 ] then echo "sda5 is full"fi
2、双分支if语句
if [ 条件判断语句 ]
then
程序
else
程序
fi
例程:判断手动输入的是不是目录文件
#! /bin/bashread -t 30 -p "please input num1:" num1read -t 30 -p "please input num2:" num2read -t 30 -p "please input operate:" opeif [ -n "$num1" -a -n "$num2" -a -n "$ope" ] then test1=$(echo "$num1" | sed 's/[0-9]//g') test2=$(echo "$num2" | sed 's/[0-9]//g') if [ -z "$test1" -a -z "$test2" ] then if [ "$ope" == '+' ] then ans=$(($num1 + $num2)) elif [ "$ope" == '-' ] then ans=$(($num1 - $num2)) elif [ "$ope" == '*' ] then ans=$(($num1 * $num2)) elif [ "$ope" == '/' ] then ans=$(($num1 / $num2)) else echo "error: input operate wrong" exit 9 fi else echo "error: input is not a num" exit 10 fi else echo "error: input num is null" exit 11fiecho "$num1" "$ope" "$num2" = $ans"
3、多分支case语句
case $变量名 in
“值1”)
若等于值1,程序
;;
“值2”)
若等于值2,程序
;;
*)
若都不等于,程序
;;
esac
4、for循环
语法一:
for 变量名 in 值1 值2 值3 ...
do
程序
done
语法二:
for ((初始值;循环控制条件;变量变化))
do
程序
done
例程:批量解压缩文件
#!/bin/bashls *.tar.gz > tar.logfor i in $(cat tar.log) do tar -zxf $i &> /dev/nulldonerm -rf tar.log例程:1加到100
#!/bin/bashs=0for ((i=1;i<=100;i=i+1)) do s=$(($s+$i))doneecho "$s"
例程:批量添加用户
#!/bin/bashread -t 30 -p "please input user name" nameread -t 30 -p "please input the numbers of users" numread -t 30 -p "please input user passwd" passif [ -n "$name" -a -n "$num" -a -n "$pass" ] then y=$( echo $num | sed 's/[0-9]'//g ) if [ -z $y ] then for ((i=1;i<=$num;i=i+1)) do /user/sbin/useradd $name$i $>/dev/null echo $pass | /user/bin/passwd --stdin $name$i $>/dev/null done fifi例程:批量删除普通用户
#!/bin/bashfor i in $(cat /etc/passwd | grep /bin/bash | grep -v root) do userdel $idone5、while循环
语法:
while [ 条件判断式 ]
do
程序
done
6、until循环
语法: 是在条件不成立时执行
until [ 条件判断式 ]
do
程序
done
- Shell基础(五):条件判断与流程控制
- shell中的条件判断与控制流程
- shell编程(条件判断与流程控制)学习笔记
- Shell编程之条件判断与流程控制
- 十二.shell编程之条件判断与流程控制
- Linux-shell编程之条件判断与流程控制
- Linux之shell编程之条件判断与流程控制
- Shell编程之流程控制语句(条件判断)
- shell变成之条件判断和流程控制
- Shell编程之条件判断和流程控制
- shell编程(五)条件判断
- java流程控制条件判断
- shell:条件测试操作与流程控制语句
- linux课堂笔记--shell5条件判断与流程控制
- Java基础(五)流程控制语句
- Linux脚本(shell)编程(五) if 条件判断
- shell的条件与控制
- SHELL条件测试和流程控制
- QML中ROW组件的使用方法及示例
- C-C++字符输出时遇到字符'\n','\0'区别
- 当前日志损坏(ACTIVE,CURRENT),数据库正常关闭
- 内存优化
- Linux系统下的软件安装方式
- Shell基础(五):条件判断与流程控制
- QML中Column的使用及示例
- hdu4121 Xiangqi && uva1589 Xiangqi (模拟)
- 斐波那契数列V(原创题)
- librtmp 时间戳超过 0xffffff时,FMS掉连接
- Android Material Design(4) CoordinatorLayout,AppBarLayout,Toolbar以及TabLayout的使用
- 2015年大二上-数据结构-内部排序-(2)-希尔排序
- [LeetCode]154. Find Minimum in Rotated Sorted Array II
- Java的各种操作