文章目录
实验一:求和(一)
计算从1到100所有整数的和
#!/bin/bash
sum=0 #定义1~100总和sum为0
for((i=1;i<=100;i++)) #定义i从1开始循环,一直到100,i累加
do
let sum+=$i #将i的值赋给sum,然后通过循环进行累加计算和
done
echo -e "1到100所有整数和为${sum}" #输出sum值至屏幕上
实验二:求和(二)
提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
read -p "请输入一个小于100的整数" num
if [[ $num -eq $num ]]
then
if [[ $num -gt 100 ]]
then
echo "这个数字大于100了,请重新输入"
exit
elif [[ $num -eq 100 ]]
then
echo "这个数字和100相同,请重新输入"
else
for((i=0;i<=${num};i++))
do
let a+=$i
done
echo "1到${num}的整数和为: ${a}"
fi
else
echo "输入的不是数字请重新输入!"
exit
fi
实验三:求和(三)
求从1到100所有整数的偶数和、奇数和
sum1=0
sum2=0
for((i=1;i<=100;i++))
do
if [[ i%2 -eq 0 ]]
then
let sum1+=$i
else
let sum2+=$i
fi
done
echo "从1到100所有整数的偶数和为${sum1},奇数和为${sum2}"
实验四:用户密码设置(一)
用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码
#!/bin/bash
for name in `cat /opt/user.txt`
do
cat /etc/passwd | awk -F: '{print $1}' | grep $name &> /dev/null
if [ $? -eq 0 ];then
echo "$name 用户已存在!"
res=$(cat /etc/shadow | grep $name | awk -F: '{print $2 }')
if [ "$res" == "!!" -o "$res" == "*" ];then
read -p "$name 用户没有设置密码,请输入密码:" pswd
echo $pswd | passwd --stdin $name > /dev/null
fi
else
echo "用户不存在,正在创建$name 用户....."
useradd $name
while true
do
read -p "请设置用户$name 的密码:" passwd1
read -p "请设置用户$name 的密码:" passwd2
if [ "$passwd1" = "$passwd2"]
then
echo $passwd1 | passwd --stdin $user > /dev/null
break
else
echo "密码输入不一致,请重新输入"
fi
done
fi
done
实验五:用户密码设置(二)
用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
ps=123456
for((i=1;i<=3;i++))
do
read -p "请用户输入密码:" pwd
if [[ $pwd -eq $ps ]]
then
echo "用户输入密码正确"
exit
else
echo "密码输入不正确,请重新输入"
fi
done
echo "密码连续输入错误3次"
实验六:用户密码设置(三)
编写能够自动生成一个6位随机密码的脚本
#!/bin/bash
str='1234567890'
for((i=1;i<=6;i++))
do
a=$[RANDOM % ${#str}]
tmp=${str:a:1}
passwd=$passwd$tmp
done
echo "随机生成一个密码为:${passwd}"
实验七:IP地址(一)
检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
#!/bin/bash
for ((i=100;i<=110;i++))
do
ping -c 2 -w 3 192.168.145.$i &>/dev/null
if [ $? -eq 0 ]
then
echo "192.168.145.$i" >>/opt/host_ip
fi
done
实验八:IP地址(二)
使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
#!/bin/bash
read -p "请输入0-255之间的数字:" num
for((i=1;i<=8;i++))
do
a=$[num % 2]$a
let num=$[num / 2]
done
echo $a
实验九:IP地址(三)
将一个点分十进制格式的IP地址转换成点分二进制格式
比如 255.255.255.255 --> 11111111.11111111.11111111.11111111
#!/bin/bash
read -p "请输入一个点分十进制的ip地址:" ipadd
a=$(echo "$ipadd" | awk -F. '{print $1}') #通过awk获取输入的ip地址的第一段
b=$(echo "$ipadd" | awk -F. '{print $2}') #通过awk获取输入的ip地址的第二段
c=$(echo "$ipadd" | awk -F. '{print $3}') #通过awk获取输入的ip地址的第三段
d=$(echo "$ipadd" | awk -F. '{print $4}') #通过awk获取输入的ip地址的第四段
for i in {1..8} #因为十进制转二进制是一段转8位,所以循环8次
do
num1=$[a % 2]$num1 #通过取余的方式获取二进制的8位数
let a=$[a / 2] #余数倒排法
num2=$[b % 2]$num2 #通过取余的方式获取二进制的8位数
let b=$[b / 2]
num3=$[c % 2]$num3 #通过取余的方式获取二进制的8位数
let c=$[c / 2]
num4=$[d % 2]$num4 #通过取余的方式获取二进制的8位数
let d=$[d / 2]
done
echo ${num1}.${num2}.${num3}.${num4}
实验十:文件(一)
编写能够按照每100行分割文件的脚本
a=0 #定义记录行数的变量
b=1 #定义分割的文件序号标识
IFS_OLD=$IFS #先将IFS赋给IFS_OLD,作为临时修改IFS的值
IFS=$'\n' #然后修改IFS的值为换行符
for i in $(cat abc.txt)
do
let a++ #记录行数
c=$[a % 100] #每100行一分割,当余数不为零就不足100行
if [ $c -eq 0 ];then #判断当余数是否为零,为0就正好100行,不为0就不足100行
echo $i >> abc.txt-$b #如果满20行,则分隔文件
let b++
else
echo $i >> abc.txt-$b #如果不满20行,则继续输出文件中
fi
done
IFS=$IFS_OLD
实验十一:文件(二)
假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动
#!/bin/bash
for file in $(ls /opt/test)
do
SUM_NOW=$(md5sum /opt/test/$file | awk '{print $1}')
SUM_OLD=$(grep $file /root/md5sum.txt | awk '{print $1}')
if [ $SUM_NOW" != "$SUM_OLD" ]
then
echo "$file 文件内容被改动!""
fi
done
实验十二:文件(三)
输出环境变量PATH的目录所包含的所有可执行文件
#!/bin/bash
IFSB=$IFS
IFS=$IFS':'
for folder in $PATH
do
echo $folder
for file in $folder/*
do
if [ -f "${file}" ] && [ -x "${file}" ]
then
echo " $file"
fi
done
done
IFS=$IFSB
实验十三:文件(四)
执行命令 mkdir -p /root/bin/aa/bb/cc/dd
; touch /root/bin/aa/bb/cc/dd/abc.txt
,通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#!/bin/bash
IFSB=$IFS
IFS=$IFS':' #保留原来IFS变量值的基础上增加:号分隔符
for folder in $PATH
do
#输出环境变量所包含的目录
#echo $folder
#已使用:号将folder进行分割,然后查看环境变量目录下所包>含的文件
for file in $(ls $folder)
do
#判断是否为文>件和是否具有可执行权限时,需要使用绝对路径进行判断
if [ -f "${folder}/${file}" ] && [ -x "${folder}/${file}" ];then
echo " $file"
fi
done
done
IFS=$IFSB
实验十四:购物
写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#!/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 "6:放弃购买"
read -p "请选择需要购买的商品序列:" num
case $num in
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
let i++
else
break
fi
done
echo -e "一共经过$i家店。\n合计购物总价:$sum。"