Shell脚本练习一部曲

Posted Zmac111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本练习一部曲相关的知识,希望对你有一定的参考价值。

Shell脚本练习一部曲

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

#!/bin/bash

if [ -f ~/test.sh ];then
   echo "test.sh文件存在"
   if [ -x ~/test.sh ];then
      echo "test.sh有可执行权限"
   else
      echo "没有可执行权限"
   fi

else
   echo "文件不存在"
fi

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

#!/bin/bash
read -p "请输入100米赛跑的秒数:" time
if 
[ $time -gt 0 -a  $time -lt 10 ] &> /dev/null;then
echo "恭喜你已进入选拔赛!"

read  -p "请输入你的性别(男或女):" xingbie
case $xingbie in
)
echo "你已进男生组"
;;
)
echo "你已进女生组"
;;
*)
echo "错误!"
esac

elif
[ $time -gt 10 ] &> /dev/null;then
echo "很遗憾,你已被淘汰"
else
echo "请重新输入"
fi

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

先要创建一个压缩文件

#!/bin/bash
read -p "请输入压缩包名称:" a
case $a in
*.tar.gz)
   if [ -f $a ];then
      tar -zxvf $a -C /opt &> /dev/null
   else
      echo "$a 不存在"
   fi
;;
*.tar.bz2)
   if [ -f $a ];then
      tar -jxvf $a -C /opt &> /dev/null
   else
      echo "$a 不存在"
   fi
;;
*)
   echo "文件输入错误"
esac

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

#!/bin/bash
read -p "请输入内容:" a
if [ $a = 0 ];then
   echo "0是偶数"
   else
   let i=a+0 &> /dev/null
if [ $? = 0 ];then
   echo "$a是整数"
   b=$[a % 2 ]
case $b in
0)
   echo "$a是偶数"
;;
*)
   echo "$a是奇数"
esac

else
   echo "$a不是整数"
fi
fi

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

#!/bin/bash
read -p "请输入主机ip:" a
ping -c 3 -i 0.5 -w 2 $a &> /dev/null
if [ $? -eq 0 ]
then
        echo "$a is  online"
else
        echo "$a is offline"
fi

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

加入服务管理用chkconfig命令
init.d 介绍
(1)init.d 目录中存放的是一系列系统服务的管理(启动与停止)脚本。
(2)用service命令可执行init.d目录中相应服务的脚本。

cd /etc/init.d
vim firewalld

#!/bin/bash
#description: Firewalld Service Control Script

case "$1" in
start)
        echo "Starting firewawlld Server..."
        systemctl start firewalld
        ;;
stop)
        echo "Stopping firewawlld  Server..."
        systemctl stop firewalld
        ;;
restart)
        echo "Restarting firewawlld Server..."
        systemctl restart firewalld
        ;;
status)
        echo "Firewalld status is ..."
        systemctl status firewalld
        ;;
*)
        echo "用法: $0 {start|stop|restart|status}"
esac


chmod +x firewalld
service firewalld statudds
用法: /etc/init.d/firewalld{start|stop|restart|status}

chkconfig --add firewalld
chkconfig firewalld on  #将firewalld 加入开机启动

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

方法1 (for循环)
#!/bin/bash
a=1
sum=0
for ((a=1;a<=100;a++))  或for a in {1..100}  或for a in $(seq 1 100)
do
    sum=$[$sum+$a]
done
echo "1-100的和为:$sum"


方法2(while循环)
#!/bin/bash
a=1
sum=0
while [ $a -le 100 ]
do
  sum=$[$sum+$a]
  let a++
done
  echo "1-100的和为 $sum"
  
  
方法3(until循环)
#!/bin/bash
a=1
sum=0
until [ $a -gt 100 ]
do
  sum=$[$sum+$a]
  let a++
done
echo "1-100的和为: $sum"

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

方法1(while循环)
#!/bin/bash
a=1
sum=0
read -p "请输入一个整数(小于100): "  b
while [ $a -le $b ]
do
  sum=$[$sum+$a]
  let a++
done
  echo "1到$b的整数和为:$sum"
  
  
方法2(for循环)
#!/bin/bash
a=1
sum=0
read -p "请输入一个整数(小于100):" b
   for ((a=1;a<=$b;a++))
   do
   sum=$[$sum+$a]
   done
echo "1到$b的和为:$sum"


方法3(until循环)
#!/bin/bash
a=1
sum=0
read -p "请输入一个整数(小于100): "  b
until [ $a -gt $b ]
do
 sum=$[$sum+$a]
 let a++
done
  echo "1到$b的整数和为:$sum"

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

方法1(for循环)
#!/bin/bash
a=1
sum1=0
for a in $(seq 1 2 100)
do
  sum1=$[$sum1+$a]
done
 echo "1到100所有整数奇数的和:$sum1"
b=0
sum2=0
for ((b=0;b<=100;b+=2))
do
 sum2=$[$sum2+$b]
done
  echo "1到100所有整数偶数的和为:$sum2"
  
  
方法2(if+for)
#!/bin/bash
ji=0
ou=0
for i in {1..100}
do
  if [ $[$i % 2] -eq 0 ]
  then
  ou=$[$ou+$i]
  else
  ji=$[$ji+$i]
  fi
done
  echo "奇数和为:$ji"
  echo "偶数和为:$ou"

10、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码

#!/bin/bash
read -p "输入你要查找的用户:" user
  id  $user &> /dev/null
  a=`echo $?`
  while [ $a -eq 0 ]
  do
   echo "此用户已存在!"
   break
  done

  while [ $a -ne 0 ]
  do
   echo "该用户不存在,将创建新用户,请输入密码!"
   useradd $user
   read -p "请输入密码:" passwd
    echo $passwd | passwd --stdin $user
   echo "用户新建成功,密码设置成功!"
  break
  done

11、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

方法1
#!/bin/bash
read -p "请输入检测主机ip的第一个字段:" a
read -p "请输入检测主机ip的第二个字段:" b
read -p "请输入检测主机ip的第三个字段:" c
read -p "请输入检测主机ip的起始地址:"  qi
read -p "请输入检测主机ip的末端地址:" mo
for ((i=$qi;i<=$mo;i++))
do
 ping -c 3 -i 0.5 -w 2 $a.$b.$c.$i &> /dev/null
 true=`echo $?`
 if [ $true -eq 0 ]
 then
  echo $a.$b.$c.$i >>  ~/host_ip
  fi
done


方法2
#!/bin/bash
for i in 192.168.19.{1..10}
do
 ping -c 3 -i 0.5 -w 2 $i &> /dev/null
 true=`echo $?`
 if [ $true -eq 0 ]
 then
  echo $i >>  ~/host_ip
  fi
done

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

#!/bin/bash
n=3
password=123456
sum=0
while true
do
        read -p "请输入密码:" PASS
        let sum++
        if [ $PASS = $password ];then
                echo "输入密码成功!"
               break
        elif [ $sum -lt $n ];then
                echo "输入密码失败,请重新输入:"
                continue
        else
                echo "三次输入错误!警告!!"
                break
        fi
done

13、编写能够自动生成一个8位随机密码的脚本

#!/bin/bash
x="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
pass="" #初始值为空
for i in {1..8}
do
        n=$[RANDOM % 62]  #取值范围是0-61
        y=${x:n:1} #取随机一个数字
        pass=${pass}$y
done
echo $pass

14、写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

#!/bin/bash

sum=0

for ((i=1; ;i++))
do
sum=$sum
  echo "可购买的商品为衣服(500元),裤子(400元),鞋子(350元),帽子(150元),袜子(50元)"
  echo "请输入相应的编号购买产品"
  echo "1:衣服 2:裤子 3:鞋子 4:帽子 5:袜子 "
  read -p "相应编号:" goods

  case $goods in
  1)
    read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
    if [ $a -eq 1 ];then
    sum=$[$sum+500]
     
      read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
        if [ "$aa" -eq 0 ];then
          echo "你本次购买了$i 件商品,一共$sum 元。"
          break
        fi
    fi
  ;;
  2)
    read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
    if [ $a -eq 1 ];then
    sum=$[$sum+400]
  
      read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
        if [ "$aa" -eq 0 ];then
          echo "你本次购买了$i 件商品,一共$sum 元。"
          break
        fi
    fi
  ;;
  3)
    read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
    if [ $a -eq 1 ];then
    sum=$[$sum+350]

      read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
        if [ "$aa" -eq 0 ];then
          echo "你本次购买了$i 件商品,一共$sum 元。"
          break
        fi
    fi
  ;;
  4)
    read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
    if [ $a -eq 1 ];then
    sum=$[$sum+150]
      
      read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
        if [ "$aa" -eq 0 ];then
          echo "你本次购买了$i 件商品,一共$sum 元。"
          break
        fi
    fi
  ;;
  5)
    read -p "请确定是否购买,按“1”确定购买,不想购买请按任意数字" a
    if [ $a -eq 1 ];then
    sum=$[$sum+50]
    
      read -p "感谢购买此商品,按任意数字键进入下一家店;按0退出" aa
        if [ "$aa" -eq 0 ];then
          echo "你本次购买了$i 件商品,一共$sum 元。"
          break
        fi
    fi
  ;;
  *)
    echo "请输入正确的商品编号"
  esac
done    


以上是关于Shell脚本练习一部曲的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

shell脚本小练习

shell脚本练习题

shell 脚本 片段

shell练习题

shell综合练习题(图文并茂代码清单)