目录
一: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
运行脚本,输出成功。