经典常用的脚本讲解

目录

一:echo 语句

二:while read命令​编辑 

三:猴子摘香蕉问题

四:斐波拉切数求前10个数的和

​五:随机生成8位数的密码

六:二进制转换

(1)余数倒排法

 (2)减法正排法

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

(1)for循环

 (2)until循环

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

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

(1)方法一

(2)方法二

十: 用户输密码问题

十一: 将一个点分十进制格式的IP地址转换成点分二进制格式

(1)方法一

 (2)方法二

十二:查看文件是否改动过

十三: 写个逛淘宝选购商品脚本

​十四: 输出环境变量PATH的目录所包含的所有可执行文件


一:echo 语句

i=`echo "aa,bb,cc, dd"`

#从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%,*}
#输出的结果:
aa,bb,cc

#从最后倒数到最长的匹配部分(用%%)后面的逗号的地方都被删除
echo ${i%%,*}
#输出的结果:
aa

#从开头到最短的匹配部分(用#)后面的逗号的地方被删除
echo ${i#*,}
#输出的结果:
bb,cc,dd

#从开头到最长的匹配部分(用##)后面的逗号的地方被删除
echo ${i##*,}
#输出的结果:
dd

#截取字符串中的某一段字符
echo ${i:下标:字符长度}

#输出变量名的字符串长度
echo ${#变量名}

#赋予一个默认值。
echo ${变量:-默认值}

二:while read命令 

三:猴子摘香蕉问题

猴子摘下来n个香蕉,当天吃了一半多一个,第二天也是吃掉剩下香蕉的一半多一个,到了第十天,香蕉只剩下了1个。问:猴子第一天摘了多少香蕉?

四:斐波拉切数求前10个数的和

斐波拉切数是一个数列,其中每个数字都是前两个数字之和。数列的前几个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987... 

[root@localhost ~]# vim fblq.sh

#!/bin/bash
a=1
b=1
c=0
for i in {1..10}
do
  echo $a
  c=$[c+a]
  sum=$[a+b]
  a=$b
  b=$sum
done
echo $c

 五:随机生成8位数的密码

[root@localhost ~]# vim mm.sh

#!/bin/bash
q='123456789abcdef'
for i in {1..8}
do
 a=$[RANDOM % ${#q}]
 b=${q:a:1}
 passwd+=$b
done
echo "生成的密码为:" $passwd

 

六:二进制转换

(1)余数倒排法

 (2)减法正排法

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

(1)for循环

[root@localhost ~]# vim zh.sh

#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
sum=$[sum + i ]
done
echo $sum 
~            

 

 (2)until循环

[root@localhost ~]# vim zh.sh

#!/bin/bash
i=0;b=0
until [ $i -eq 101 ]
do
    let b+=i
    let i++
done
echo $b

 

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

[root@localhost ~]# vim aa.sh

#!/bin/bash
read -p "请输入一个整数:" num
#设置变量i等于1,i小于等于变量num,变量i每次循环自加1
for ((i=1;i<=num;i++))
do
#变量sum等于变量sum加变量i
 sum=$[sum + i]
done
echo $sum

 

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

(1)方法一

[root@localhost ~]# vim xh.sh

#!/bin/bash
#a为偶数的变量,b为奇数变量
a=0
b=0
#变量i等于1,i小于等于100,每次循环自加1
#!/bin/bash
#a为偶数的变量,b为奇数变量
a=0
b=0
#变量i等于1,i循环100次,每次循环自加1
for ((i=1;i<=100;i++))
do
#判断变量i的取余等于0
   if [ $(($i % 2)) -eq 0 ]
   then
#取余为0,则偶数和为$a加$i
      a=$(($a+$i))
#取余不等于0,则奇数和为$b加$i
   else
      b=$(($b+$i))
   fi
done
echo "偶数和为:" $a
echo "奇数和为:" $b

 

 (2)方法二

[root@localhost ~]# vim xh2.sh

#!/bin/bash
#变量a为偶数变量
a=0
#设置i等于2,循环100次,每次循环自加2
for ((i=2;i<=100;i+=2))
do
#用$a加$i的变量值赋值给变量a
a=$(($a+$i))
done
echo "偶数和为:" $a

#变量b为奇数变量
b=0
#设置i等于1,循环99次,每次循环自加2
for ((i=1;i<=99;i+=2))
do
#用$b加$i的变量值赋值给变量b
b=$(($b+$i))
done

 

十: 用户输密码问题

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

[root@localhost ~]# vim mima2.sh

#!/bin/bash
a=123456
#设置变量i等于1,i<=3的意思可以理解为循环3次,每次循环i自加1
for ((i=1;i<=3;i++))
do

read -p "请输入正确的密码:" num
#如果变量a等于变量num
    if [ "$a" == "$num" ]
      then
      echo "密码输入正确"
#密码输入正确则直接退出       
         exit
      else
      echo "密码输入错误,请重新输入"
    fi
done
echo "警告:已错误3次"

 

十一: 将一个点分十进制格式的IP地址转换成点分二进制格式

(1)方法一

[root@localhost ~]# vim ejz.sh

#!/bin/bash
read -p "请输入ip地址:" ip
#awk -F.意思为指定.分割符,{print $1} 为$ip第一部分为变量a
a=$(echo "$ip" | awk -F. '{print $1}')
#{print $2} 为$ip第二部分为变量b
b=$(echo "$ip" | awk -F. '{print $2}')
#{print $3} 为$ip第三部分为变量c
c=$(echo "$ip" | awk -F. '{print $3}')
#{print $4} 为$ip第四部分为变量d
d=$(echo "$ip" | awk -F. '{print $4}')

#循环8次
for i in {1..8}
do
#对4个变量进行二进制转换后的赋值
  num1=$[a % 2]$num1
  let a=$[a / 2]
  num2=$[b % 2]$num2
  let b=$[b / 2]
  num3=$[c % 2]$num3
  let c=$[c / 2]
  num4=$[d % 2]$num4
  let d=$[d / 2]
done
#按照顺序将变量进行转换输出
echo $num1.$num2.$num3.$num4

 (2)方法二

[root@localhost ~]# vim ejz2.sh

#!/bin/bash
read -p "请输入IP地址:" ip
#设置变量b
b=0
#用IFSB对$IFS进行复制
IFSB=$IFS
#对IFS进行重新赋值,将'.'加入,识别以.分割
IFS=$IFS'.'

for a in `echo $ip`
do
   for i in {128,64,32,16,8,4,2,1}
   do
#通过减法正排进行二进制换算
      NUM=$[$a -$i]
#进行判断,$NUM是否小于0
      if [ $NUM -lt 0 ]
      then
#小于0,输出0
          echo -n "0"
#不小于0时,输出1
      else
          echo -n "1"
          a=$NUM
      fi
   done
#b每次循环自加1
       let b+=1
#b小于4,输出 “.”
       if [ $b -lt 4 ]
       then
          echo -n "."
       fi
done
echo

 

十二:查看文件是否改动过

 假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动

[root@localhost ~]# vim test.sh

#!/bin/bash
#设置变量i,路径必须用绝对路径
for i in $(ls /root/test)
do
#将test文件校验核的第一部分设为sum_now变量
 sum_now=$(md5sum /root/test/$i | awk '{print $1}')
#在md5.txt文件中找到$i的第一部分的校验核,将其设为变量sum_old
 sum_old=$(grep $i /root/md5.txt | awk '{print $1}')

#将$sum_now和$sum_old两个变量进行比较,两个变量不等于时
  if [ "$sum_now" != "$sum_old" ]
  then
#进行提示
    echo "$i文件内容被改动!"
  fi
done

 

十三: 写个逛淘宝选购商品脚本

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

[root@192 ~]# vim tb.sh

#!/bin/bash
#定义逛店次数变量 i
i=1
#定义购物总额变量 sum
sum=0
#死循环
while true
do
        echo "来到第$i家商店门口"
        read -p "是否进入看看(yes/no)" doing
        until [ $doing = "no" ]
        do
                echo "1:衣服¥500"
                echo "2:裤子¥400"
                echo "3:鞋子¥350"
                echo "4:帽子¥150"
                echo "5:袜子¥50"
                echo "3:鞋子¥350"
                echo "4:帽子¥150"
                echo "5:袜子¥50"
                echo "6:放弃购买"
                read -p "请选择需要购买的商品序列:" num
                case $num in
#选项1:输出衣服购买成功,$sum加500
                1)
                        echo "衣服购买成功"
                        let sum+=500
                        ;;
                2)
                        echo "裤子购买成功"
                        sum=$[sum+=400]
                        ;;
                3)
                        echo "鞋子购买成功"
                        sum=$[sum+=350]
                        ;;
                4)
                        echo "帽子购买成功"
                        sum=$[sum+=150]
                        ;;
                5)
                    echo "袜子购买成功"
                        sum=$[sum+=50]
                        ;;
                6)
                        echo "放弃购买"
            ;;
                *)
                    echo "输入错误"
                esac
                read -p "是否继续在这家店购物(yes/no)" doing
        done

        read -p "是否继续逛街(yes/no)" going
        if [ $going = "yes" ]
        then
#输入yes,会继续进行循环,i自加1,no则直接退出
                let i++
        else
                break
        fi
done
echo -e "一共经过$i家店。\n合计购物总价:$sum。"

十四: 输出环境变量PATH的目录所包含的所有可执行文件

[root@192 ~]# vim hjbl.sh

#!/bin/bash
#备份IFS,将":"加入重新赋值的IFS,可识别":"
IFSB=$IFS
IFS=$IFS':'

for i in $PATH
do
  echo $i
  for a in $(ls $i)
  do
#进行判断,需补全目录名,-f 测试是否为文件,-x 测试是否有执行权限 
    if [ -f "${i}/${a}" ]  && [ -x "${i}/${a}" ]
    then
      echo "  $a"
    fi
  done
done

#还原IFS
IFS=$IFSB

 运行脚本,输出成功。

猜你喜欢

转载自blog.csdn.net/A1100886/article/details/130487654
今日推荐