shell编程条件循环小实验

165 阅读2分钟

1. 实验一

检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

#!/bin/bash
ls /root/test.sh &> /dev/null  //查看是否有/root/test.sh文件
if [ $? -eq 0 ];then   //上一条执行结果$?返回值等于0的话,文件存在,否则不存在
	echo "文件存在"
	/root/test.sh &> /dev/null   //绝对执行这个文件 
	if [ $? -eq 0 ];then      //上一条执行结果$?返回值等于0的话,文件有权限,否则没有
		echo "有执行权限"
	else
		echo "没有执行权限"
	fi
else
 	echo "文件不存在"
fi
  • 执行结果 image.png

2.实验二

提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

#!/bin/bash
read -p "请输入100米赛跑秒数:" num   //输入提示信息,定义一个变量num
if [ $num -le 10 ] && [ $num -gt 0 ];then  //如果num小于10并且大于0,输出晋级
	echo "晋级"
	read -p "请输入性别(男、女):" sex  //输入提示信息,定义变量sex
	if [ $sex == 男 ];then  //如果变量字符串等于男,进入男生组
		echo "恭喜进入男生组"
	elif [ $sex == 女 ];then //如果变量字符串等于女,进入女生组
		echo "恭喜进入女生组"
	else
		echo "输入错误"  //否则输入错误
	fi
elif [ $num -ge 10 ];then  //如果num大于等于10,会被淘汰
	echo "淘汰"
else 
	echo "请重新输入"
fi
  • 执行结果

image.png

3.实验三

用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录

#!/bin/bash
case $1 in  //定义位置变量$1
*.tar.gz|*.tar.bz2)  //定义范围在*.tar.gz和*.tar.bz2
  tar xf $1 -C /opt &> /dev/null   //解压$1文件到/opt目录下
  echo "已经解压到了opt目录"
;;
*)   //表示其余的
  echo "不是可解压文件"
esac
  • 执行结果

image.png

4.实验四

提示用户输入内容,使用if 语句判断输入的内容是否为整数。

#!/bin/bash

read -p "请输入一个整数:" num  //输入提示信息,定义变量num
expr $num + 0 &> /dev/null     //使用变量num做算数运算

if [ $? -eq 0 ];then           //如果上一次执行的命令的返回值0,则输出整数,否则不是整数
	echo "是整数"
else
	echo "不是整数"
fi
  • 执行结果

image.png

5.实验五

根据上一题再判断输入的内容是奇数还是偶数。

#!/bin/bash
read -p "请输入一个整数:" num  //输入提示信息,定义一个变量num
if [  $num -eq 0 ];then        //只要变量是0,会输出既是整数也是偶数
	echo "$num既是整数也是偶数"
else 
	expr $num + 0 &> /dev/null  //使用变量num做算数运算
	if [ $? -eq 0 ];then        //如果上一次执行的命令的返回值0,则输出整数,否则不是整数
		echo "是整数"	
		a=$[$num % 2] &> /dev/null  //定义一个a等于num除以2取余
		if [ $a = 0 ];then          //如果a等于0时,输出偶数,否则输出奇数
			echo "偶数"
		else	
			echo "奇数"
		fi
	else
		echo "不是整数"
	fi
fi
  • 执行结果

image.png

6.实验六

用if 语句判断主机是否存活

#!/bin/bash
ping -c 3 -i 0.5 -w 2  $1 &> /dev/null
if [ $? -eq 0 ];then
        echo "$1 is online" 
else
        echo "$1 is offline"
fi
  • 执行结果

image.png

7.实验七

用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中(#chkconfig: 2345 99 20)使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务, 要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。

[root@localhost ky22]# cd /etc/init.d/
[root@localhost init.d]# vim firewalld 
#!/bin/bash
#chkconfig: - 2345 99 20
case $1 in
start)
        systemctl start firewalld.service
        ;;
stop)
        systemctl stop firewalld.service
        ;;
restart)
        $0 start
        $0 stop
        ;;
status)
        systemctl status firewalld.service
        ;;
*)
        echo "useage: $0 {start|stop|restart|status}"
esac
  • 执行结果

image.png