Shell~基础练习

6 篇文章 0 订阅

检查用户家目录中的 test.sh 文件是否存在

1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
[ -f test.sh ] && echo "存在"
[ -x test.sh ] && echo "存在" || echo "无执行权限"
chmod +x test.sh

提示用户输入判断

2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
#!/bin/bash
read -p "输入你的秒数:" s
if [ $s -gt 0 ] && [ $s -le 10 ];then
	read -p "恭喜进入选拔赛,请输入你的性别:" sex
	if [ $sex = "男" ];then
		echo "你加入男生组。"
	elif [ $sex = "女" ];then
		echo "你加入女生组。"
	else
		echo "你的性别有问题。"
	fi
elif [ $s -gt 10 ];then
                echo "你的成绩大于10秒,不合格!"

else 
	echo "你成绩有问题。"
fi

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

3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
#!/bin/bash
gz=$( ls $1 | awk -F. '{print $3}')
echo "解压文件名为:$1 后缀名为:$gz "

case $gz in
  "gz")
      tar zxf $1 -C /opt
      echo "$1 :解压缩完成!"
  ;;
  "bz2")
      tar jxf $1 -C /opt
      echo "$1 :解压缩完成!"
  ;; 
  *)
      echo "压缩文件错误!"
esac

使用if 语句判断输入的内容是否为整数

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

#!/bin/bash
read -p "请输入一个数:" sum
expr $sum + 1 &>/dev/null
if [ $? -eq 0 ];then
      echo "您输入的是一个整数。"
else
      echo "您输入的数值不为整数!"
fi

内容是奇数还是偶数

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

#!/bin/bash
read -p "请输入一个数:" sum
expr $sum + 1 &>/dev/null
if [ $? -eq 0 ];then
      echo "您输入的是一个整数。"
      zhi=$(expr $sum % 2 ) 
      # echo "值为:$zhi"
      case $zhi in
	0)
	  echo "$sum : 该数值为偶数"
	;;
	1)
	  echo "$sum : 该数值为奇数"
	;;
      esac
else 
      echo "您输入的数值不为整数!"
fi

6.用if 语句判断主机是否存活
ping -c 3 -i 0.5 -W 2 $1 &> /dev/null 

if [ $? -eq 0 ];then
	echo "存活" 
else
	echo "不存活"
fi

firewalld脚本

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

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/SY
[root@localhost ~/SY]# vim testF.sh


#!/bin/bash


case $1 in
start)
        systemctl $1 firewalld
;;
stop)
        systemctl $1 firewalld
;;
status)
        systemctl $1 firewalld
;;
restart)
        systemctl $1 firewalld
;;
*)
        echo "用法: $0 {start|stop|status|restart}"
esac

计算从1到100所有整数的和

1.计算从1到100所有整数的和
i=0
sum=0
while [ $i -le 100 ]
do
        sum=$[$sum+$i]
        let i++
done
echo "sum=$sum"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUb33KWJ-1620894366950)(图片/实验与记录/image-20210512031755027.png)]

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

2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
i=0
sum=0
read -p "输入你要计算的值(1~100):" s
while [ $i -le $s ]
do
        sum=$[$sum+$i]
        let i++
done
echo "sum=$sum"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLxNg0bS-1620894366954)(图片/实验与记录/image-20210512031723927.png)]

while求从1到100所有整数的偶数和、奇数和

3.求从1到100所有整数的偶数和、奇数和
i=0
jj=0
oo=0
# read -p "输入你要计算的值(1~100):" s
while [ $i -le 100 ]
do
        z=$[$i%2]
        case $z in
        0)
          jj=$[$jj+$i]
          let i++
        ;;
        1)
          oo=$[$oo+$i]
          let i++
        ;;
        esac
done
echo "奇数=$jj"
echo "偶数=$oo"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z5Ic2Suj-1620894366957)(图片/实验与记录/image-20210512031427794.png)]

while判断用户是否存在

4.执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
i=0
while true
do
        read -p "输入你的用户名:" s
        i=$(id $s) &>/dev/null
        if [ $? -eq 0 ]
        then
            echo "该用户存在。。。"
        else 
            read -p "该用户不存在,创建该用户 $s,请输入密码:" pass
            useradd $s
            echo "$pass" | passwd --stdin $s &> /dev/null
        fi  
done   

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IzQiXvJ-1620894366960)(图片/实验与记录/image-20210512031317508.png)]

测试指定的存活主机范围

5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
IP="192.168.88."
read -p "指定范围内的主机开始IP尾数:" x
read -p "指定范围内的主机结束IP尾数:" y
for ((i=$x ; i<$y ; i++))
do
    ping -c 2 -i 1 -W 3 $IP$i & &> /dev/null
    if [ $? -eq 0 ];then
        echo "可通信主机IP:$IP$i" > ~/SY/host_ip
    fi
done

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BAJCSp7j-1620894366962)(图片/实验与记录/image-20210512031137776.png)]

if判断用户&密码是否对应

6.用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SavY9syf-1620894366963)(图片/实验与记录/6.png)]

for获取8位随机密码

7.编写能够自动生成一个8位随机密码的脚本
x=""
for ((i=0 ; $i<8 ; i++))
do
    #j=$RANDOM
    j=$[$RANDOM % 10]
    echo "随机值:$j"
    x=$x$j
    # 取每个字符串的第一位
    #x=$x${j:0:1}
done
echo "$x"

不懂:$[RANDOM%${#a}]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTfHwBAz-1620894366964)(图片/实验与记录/image-20210512094439885.png)]

while逛商场

8.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
jg=0
while true
do
    read -p "请问你是否逛商场:" a
    if [ $a = "y" ];then
        read -p "请选择你购买的商品:1衣服500,2裤子400元,3鞋子350元,4帽子150元,5袜子50>元:" p
        case $p in
        1)
            let jg+=500
        ;;
        2)
            let jg+=400
        ;;
        3)
            let jg+=350
        ;;
        4)
            let jg+=150
        ;;
        5)
            let jg+=50
         ;;
        *)
            echo "没有你需要的商品!!!"
        esac
    elif [ $a = "n" ];then
        echo "你今天总共消费:$jg"
        break
    else
        echo "目的不明确!!!"
    fi
    echo "你目前总共消费:$jg"
done

if判断成绩:set -x 开启调试模式

当脚本文件较长时,可以使用 set 命令指定调试一段脚本。
#!/bin/bash
set -x //开启调试模式
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分!优秀"
set +x //关闭调试模式
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格"
else
echo "$GRADE 分?不合格"
fi

判断PATH环境变量目录下的可执行文件

# 添加系统默认分隔符为:
IFS=$IFS:
# 定义变量count1和count2用来统计文件总数和可执行文件的总数
count1=0
count2=0
# 将环境变量PATH的路径循环出来,用i来接受
for i in $PATH
{
        # 进入到我们循环的目录中
        cd $i
        # 使用ls命令显示目录中的文件
        for j in `ls $i`
        do
        # 循环一次,将变量count1进行加1
        let count1++
                # 使用test -x 测试每次循环出来的文件具有执行权限
                test -x $j
                # 根据上一步返回的状态码进行判断,等于0的话
                if [ $? -eq 0 ]
                then
                        # 等于0代表该文件可以执行
#                       echo $j 可执行
                        # 然后将count2进行加1
                        let count2++
                else
                        echo $j 
                fi
        done
}
        echo 环境变量'$PATH'的文件总数量为:$count1
        echo 环境变量'$PATH'的可执行文件总数量为:$count2

冒泡排序

#!/bin/bash
arry=(14 32 24 54 21 2 24 11 13 42)
echo "排序前:${arry[*]}"
for ((j=0 ; j < ${#arry[*]} ; j++ )){
        l=0
        for (( i=1 ; i< $[${#arry[*]} - $j ] ; i++ )){
                if [ ${arry[$l]} -gt ${arry[$i]} ];then
                        z=${arry[$i]}
                        arry[$i]=${arry[$l]}
                        arry[$l]=$z
                fi
                let l++
        } 
}           
echo "排序后:${arry[*]}"

选择排序

#!/bin/bash
arr=(26 32 1 5 3 76 25 33 23 41)
long=${#arr[*]}
echo "排序前:${arr[*]}"
set -x
for ((i=1 ; i < $long ; i++ ))
do
        l=0
        for (( j=1 ; j<=$long-$i ; j++ ))
        do
                if [ ${arr[$j]} -lt ${arr[$l]} ]
                then
                        l=$j
                fi
                ll=$[$long-$i]
                z=${arr[$ll]}
                arr[$ll]=${arr[$l]}
                arr[$l]=$z
        done
done
echo "排序后:${arr[*]}"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值