Shell编程文件测试、条件语句、循环语句

条件测试

test命令

测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]

文件测试

[ 操作符 文件或目录 ]
常用的测试操作符

  • -d:测试是否为目录(Directory)
  • -e:测试目录或文件是否存在(Exist)
    • f:测试是否为文件(File)
  • -r:测试当前用户是否有权限读取。(Read)
  • -w:测试当前用户是否有权限写入(Write)
  • -x:测试当前用户是否有权限执行(eXcute)
[root@localhost ~]#  [ -d /media/cdrom ]
[root@localhost ~]# echo $?
1						#返回值为1表示条件不成立
[root@localhost ~]#  [ -d /root ]
[root@localhost ~]# echo $?
0						#返回值为0表示条件成立
[root@localhost ~]#  [ -d /root ] && echo "yes"		#逻辑与,“而且”的意思”
yes

整数值比较

[ 整数1 操作符 整数2 ]
常用的测试操作符:

  • -eq:等于(Equal)
  • -ne:不等于(Not Equal)
  • -gt:大于(Greater Than)
  • -lt:小于(Lesser Than)
  • -le:小于或等于(Lesser or Equal)
  • -ge:大于或等于(Greater or Equal)
[root@localhost ~]# who | wc -l
7
[root@localhost ~]# [ $(who | wc -l) -gt 5 ] && echo "Too many."	#用户数是否>5
Too many.
[root@localhost ~]# [$(who [ wc -l) -ge 10 ] && echo "> = 10."	#用户数是否>=10
[root@localhost ~]# FreeCC=$(free -m | grep "Mem: " | agk "{fprint $6}")
[root@localhost ~]# [$FreeCC -lt 1024 ] && echo ${FreeCC}MB	#空闲内存是否<1024MB
275MB

字符串测试

1、字符串比较
格式1
[ 字符串1 = 字符串2 ]
[字符串1 != 字符串2 ]
格式2
[ -z 字符串 ]
2、常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,!号表示相反的意思
  • -z:字符串内容为空
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
[root@localhost ~]# [ $LANG != "en.US"]&& echo "Not en.Us
"Not en.Uus
[root@localhost ~]# read -p“是否覆盖现有文件(yesIno) ?"ACK
是否覆盖现有文件(yes/no)? yes
[root@localhost~]# [ $ACK = "yes" ] && echo"覆盖”	#测试读入的字符串是否为yes
覆盖

逻辑测试

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] …
格式2:命令1 操作符 命令2
常用的测试操作符

  • -a或&&:逻辑与,“而且”的意思
  • -o或||:逻辑或,“或者”的意思
    !:逻辑否
[root@localhost~]# [ -d /etc ] && [ -r /etc ] && echo "You can op
[root@localhost ~]# [ -d letc ] ll [ -d /home ] && echo "ok"

if语句的结构

单分支结构

if  条件测试操作
	then  命令序列
fi

双分支结构

if 条件测试操作 
	then  命令序列1
	else  命令序列2
fi

多分支结构

if  条件测试操作1
	  then  命令序列1
elif  条件测试操作2
	  then命令序列2
else
命令序列3
fi

case多分支语句

[root@localhost-]# cat hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
	[a-z][[A-Z])
		echo "您输入的是字母." 
		;;
	[0-9])
		echo "您输入的是数字."
		;;
	*)
		echo "您输入的是空格、功能键或其他控制字符."
esac

for语句的结构

读取不同的变量值,用来逐个执行同一组命今

for 变量名 in 取值列表
do
	命令序列
done

while语句的结构

重复测试某个条件,只要条件成立则反复执行

while  条件测试操作
do
	命令序列
done

for循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另外一种循环——while 语句。

until语句的结构

重复测试某个条件,只要条件不成立则反复执行

until  条件测试操作
do
	命令序列
done

硬盘超额报警

yum -y install mailx
vi /etc/mail.rc
set from=邮箱地址			#如:xxxxxx@qq.com
set smtp=smtp.邮箱后缀		#如:stmp.qq.com
set smtp-auth-user=邮箱地址	
set smtp-auth-password=邮箱授权码
set smtp-auth=login
hard_margin=$( df -Th | grep "/$" | awk -F ' [%]+’ ' {print $6})
[root@server1~]# echo $hard_margin
12
[ $hard_margin -gt 10 ] && $(echo"硬盘使用量超额” │ mail -s "硬盘报警” 邮箱地址)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值