shell 编程

shell 编程

判断

  • 判断23是否大于22
[root@localhost ~]# [ 23 -ge 22 ] && echo "yes" || echo "no"
yes

  • 判断23 是否小于22
[root@localhost ~]# [ 23 -le 22 ] && echo "yes"  || echo "no"
no

  • 多重条件判断

判断1 -a 判断2 : 逻辑与
判断1 -o 判断2 : 逻辑或
!判断 : 逻辑非

流程控制

  • 单分支if条件语句
if [ 条件判断式 ];then
	程序
fi

if [ 条件判断式 ]
	then
	程序
fi

判断登陆用户是否为root用户

#!/bin/bash
test=$(env |grep "USER" | cut -d "=" -f2) 
if [ "$test"==root ]
	then
	echo "Current user is root."
fi

判断分区使用率

#!/bin/bash
test=$(df -h | grep sda5 | awk '{print $5}') | cut -d "%" -f 1)
#如果使用超过90,则发送信息提醒管理员做出相应措施
if [ "$test" -ge "90" ]
	then
		echo "/ is full"
fi
  • 双分支if条件语句
    [格式]:
if [ 条件判断式 ]
	then
		条件成立时,执行的程序
	else
		条件不成立时,执行的另一个程序
fi

判断是否为一个目录

#!/bin/bash
read -t 30 -p "please input a dir: " dir
if [ -d "$dir"]
	then
		echo "input is a directary."
	else
		echo "input isn't a directary." 
fi

判断apache是否启动

#!/bin/bash
#截取apached进程,并把结果赋予变量test
test=$(ps aux | grep httpd | grep -v grep)
#测试test是否为空,如果不为空,则执行then中命令
if [ -n "$test" ]
	then
		echo "$(date) httpd is ok! " >> /tmp/autostart-acc.log
	else 
		/etc/rc.d/init.d/httpd start &>/dev/null
		echo "$(date) restart httpd !! " >> /tmp/autostart-err.log
fi

  • 多分支if条件语句
if [ 条件判断式1 ]
	then
		当条件判断式1成立时,执行程序1
elif  [ 条件判断式2 ]
	then
		当条件判断式2成立时,执行程序2
... 省略更多的条件....	
else 
	当所有条件不成立时,最后执行此程序
fi

判断用户输入是什么文件

#!/bin/bash
#接收键盘的输入,并赋予变量file
read -p "Please input a filename: " file
#判断变量是否为空
if [ -z "$file" ]
	then
		echo "Erroe,please input a filename!!"
		exit 1 
#判断file值是否为空
elif [ ! -e "file" ]
	then 
		echo "you input is not a file! "
		exit 2
#判断file是否为一个普通文件
elif [ -f "$file" ]
	then 
		echo "file is a regulare file ! "
#判断file是否为一个目录
elif [ -d "$file" ]
	then 
		ehco "file is a dirctory !"
else 
	echo "file is another file ! "
fi
		
  • 多分支case条件语句
case $变量名 in
"值1")
	如果变量的值等于值1,则执行程序1
	::
"值2")
	如果变量的值等于2,则执行程序2
	;;
...省略其他分支...
*)
	如果变量的值都不是以上的值,则执行此程序
;;
esac

  • For循环语句
for i in 1 2 3 4 5 
	do 
		echo $i
	done
	

批量解压缩脚本

#!/bin/bash
cd /root/test
ls *.tar.gz > ls.log
for i in $(cat ls.log)
	do 
		tar -zxf $i &> /dev/null
	done
rm -rf /lamp/ls.log


批量添加指定数量的用户

read -p "please input user name: " -t 30 name
read -p "please input the number of users: " -t 30 num
read -p "please input the password of users: " -t 30 pass
if [ ! -z "$name" -a ! -z "$num" -a ! -z  "$pass" ] 
	then 
	y=$(echo $num | sed 's/[0-9]//g')
	if [ -z "$y" ]
		then
		for (( i=1;i<=$num;i=i+1))
			do
				/usr/sbin/useradd $name$i
				echo $pass |  /usr/bin/passwd --stdin $name$i &>/dev/null
			done
	fi
fi

原文地址:https://www.cnblogs.com/Ethan2lee/p/7532050.html