shell脚本编程条件循环练习题

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

#!/bin/bash
if test -f /home/test.sh
then
        echo "该文件存在,且存在于/home下"
        if test -x /home/test.sh
        then
                echo "且有执行权限"
        else
                echo "且没有执行权限"
        fi
else
        echo "/home目录不存在该文件"
fi
 

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

#!/bin/bash
read -p "请输入跑步成绩" num
if [[ $num -gt 0 && $num -lt 10 ]]
then
        echo "进入选拔赛"
        read -p "请输入数字,0代表女,1代表男" sex
        if [ $sex -eq 1 ]
        then
                echo "被分入男子组"
        elif [ $sex -eq 0 ]
        then
                echo "被分入女子组"
        else
                echo "输入内容不对,只能输入‘0’、‘1’!"
        fi

else
        echo "不符合10秒内的要求,被淘汰"
fi
 

3、用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录。(后缀为.tar.gz时用tar -zxvf,后缀为.tar.bz2用tar -jxvf)

#!/bin/bash
read -p "请输入文件名:" n
case $n in
*.tar.gz)
        tar -zxvf $n -C /opt
;;
*.tar.bz2)
        tar -jxvf $n -C /opt
;;
*)
        echo "不符合要求"
;;
esac
 

4、提示用户输入内容,使用if 语句判断输入的内容是否为整数。再判断输入的内容是奇数还是偶数。

#!/bin/bash
read -p "请输入一个整数" num
if [[ $num -eq $num ]] &> /dev/null
then
        echo "这是一个整数"
        if [[ $num%2 -eq 0 ]]
        then
                echo "且这是一个偶数"
        else
                echo "且这是一个奇数"
        fi
else
        echo "这不是一个整数"
fi
 

5、用if 语句判断主机是否存活.保存到/opt/hosts.txt 
(ping -c 5 不显示ping的过程)

#!/bin/bash
ping -c 10 $ip &> /dev/null
if [[ $i -eq 0 ]]
then
        echo "ip号为 $ip online"
else
        echo "ip号为 $ip offline"
fi
 

6、用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务,
要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}”。

#!/bin/bash
read -p "请输入‘start’、‘stop’、‘status’、‘restart’来控制防火墙" num
case $num in
start)
        systemctl start firewalld
        echo "1"
;;
stop)
        systemctl stop firewalld
        echo "2"
;;
status)
        systemctl status firewalld
        echo "3"
;;
restart)
        systemctl restart firewalld
        echo "4"
;;
*)
        echo "你输入有误"
esac
 

7、一家店铺,五种商品进行选择,
衣服 500
裤子 400
鞋子 350
帽子 150
袜子 50
用户逛到了这家店,每次选购完之后或者进店什么都不买都提示用户,你还要接着买吗?
如果不再继续购物,提示用户的消费金额,结账才能走了。

#!/bin/bash
echo "欢迎光临,1号商品衣服500元,2号商品裤子400元"
echo "3号商品鞋子350元,4号商品帽子150元,5号商品袜子50元"
sum=0
for ((;;))
do
        read -p "购买商品请输入商品编号,不购买输入’0‘:" n
        case $n in
        0)
                echo "您一共消费$sum"
                break
        ;;
        1)
                sum=$[$sum+500]
                echo "您买入了一件衣服"
        ;;
        2)
                sum=$[$sum+400]
                echo "您买入了一件裤子"
        ;;
        3)
                sum=$[$sum+350]
                echo "您买入了一双鞋子"
        ;;
        4)
                sum=$[$sum+150]
                echo "您买入了一顶帽子"
        ;;
        5)
                sum=$[$sum+50]
                echo "您买入了一顶帽子"
        ;;
        *)
                echo "编号输入错误"
        esac
done
 

8、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

read -p "输入一个小于100的整数:" n
sum=0
for((;;))
do

        if [[ $n -le 0 ]]
        then
                break
        fi
        sum=$(($sum+$n))
        n=$(($n-1))
        echo $sum
done
echo $sum
 

9、实现可变菱形。

read -p "输入一个数" n2
count=0
for ((i = 1; i<= n2; i++))
do
        for ((j=0;j<n2-i;j++))
        do
                echo -n " "
        done
        for ((j=0;j <$((2*i-1));j++))
        do
                echo -n "*"
        done
        echo ""
done
for ((i=1;i <= n2-1;i++))
do
        for ((j=0;j < i;j++))
        do
                echo -n " "

        done
        for ((j=0;j < $(( 2*($n2-1-i)+1 ));j++))
        do
                echo -n "*"
        done
        echo ""
done
 

10、查找/opt/test中的所有文件,并将它们复制/opt/test1中

mkdir test1
for i in /opt/test/*
do
        test -f $i
        if [ $? -eq 0 ]
        then
                echo $i
                cp $i /opt/test1/
        fi
done
ls test1/
 

11、查找opt目录下的所有.txt位结尾的文件,如果存在,打印文件内容。然后把文件内容保存到/opt/new.txt中

touch /opt/new.txt
for i in /opt/*.txt
do
        test -f $i
        if [ $? -eq 0 ]
        then
                echo "$i的内容是"
                cat $i
                num=`cat $i`
                echo $num >> /opt/new.txt
                echo ""
        fi

done
 

12、用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,
输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;
若该用户不存在,提示用户输入密码,建立用户并设立其密码

function usermanager {
 id $user &> /dev/null
 if [ $? -eq 0 ]
 then
   echo "用户已经存在"
#存在的用户要判断是否有密码,!! 
res=$(cat /etc/shadow | grep "$user" | awk -F: '{print $2}')
   if [ "$res" == "!!" -o -z "$res" ]
#判断用户的密码情况分!!和为空
   then
      echo "123456" | passwd --stdin $user
   else
     echo "用户密码已经创建"
   fi
#else分支解决用户不存在的情况
 else
    echo "${user}不存在"
    useradd $user
    echo "123456" | passwd --stdin $user
fi
}
user=ky04
usermanager

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值