目录
一: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}
doecho $ac=$[c+a]sum=$[a+b]a=$bb=$sum
done
echo $c
五:随机生成8位数的密码
[root@localhost ~]# vim mm.sh#!/bin/bash
q='123456789abcdef'
for i in {1..8}
doa=$[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 ]
dolet b+=ilet 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加变量isum=$[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的取余等于0if [ $(($i % 2)) -eq 0 ]then
#取余为0,则偶数和为$a加$ia=$(($a+$i))
#取余不等于0,则奇数和为$b加$ielseb=$(($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++))
doread -p "请输入正确的密码:" num
#如果变量a等于变量numif [ "$a" == "$num" ]thenecho "密码输入正确"
#密码输入正确则直接退出 exitelseecho "密码输入错误,请重新输入"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]$num1let a=$[a / 2]num2=$[b % 2]$num2let b=$[b / 2]num3=$[c % 2]$num3let c=$[c / 2]num4=$[d % 2]$num4let 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`
dofor i in {128,64,32,16,8,4,2,1}do
#通过减法正排进行二进制换算NUM=$[$a -$i]
#进行判断,$NUM是否小于0if [ $NUM -lt 0 ]then
#小于0,输出0echo -n "0"
#不小于0时,输出1elseecho -n "1"a=$NUMfidone
#b每次循环自加1let b+=1
#b小于4,输出 “.”if [ $b -lt 4 ]thenecho -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_oldsum_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
doecho "来到第$i家商店门口"read -p "是否进入看看(yes/no)" doinguntil [ $doing = "no" ]doecho "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 "请选择需要购买的商品序列:" numcase $num in
#选项1:输出衣服购买成功,$sum加5001)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 "输入错误"esacread -p "是否继续在这家店购物(yes/no)" doingdoneread -p "是否继续逛街(yes/no)" goingif [ $going = "yes" ]then
#输入yes,会继续进行循环,i自加1,no则直接退出let i++elsebreakfi
done
echo -e "一共经过$i家店。\n合计购物总价:$sum。"
十四: 输出环境变量PATH的目录所包含的所有可执行文件
[root@192 ~]# vim hjbl.sh#!/bin/bash
#备份IFS,将":"加入重新赋值的IFS,可识别":"
IFSB=$IFS
IFS=$IFS':'for i in $PATH
doecho $ifor a in $(ls $i)do
#进行判断,需补全目录名,-f 测试是否为文件,-x 测试是否有执行权限 if [ -f "${i}/${a}" ] && [ -x "${i}/${a}" ]thenecho " $a"fidone
done#还原IFS
IFS=$IFSB
运行脚本,输出成功。