1.实验一
计算从1到100所有整数的和
#!/bin/bash
sum=0 //定义一个循环变量sum,初始值为0
i=1
until [ $i -gt 100 ] //只要大于大于100就会跳出循环
do
sum=$[sum + i] //每次循环sum都会加一次i
let i++ //每次i自加1
done
echo $sum //输出1-100的所有的整数和
- 执行结果
2.实验二
提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
#!/bin/bash
read -p "请输入一个整数(1~100):" num //输入提示信息,自定义变量num
sum=0 //定义一个循环变量sum,初始值为0
i=1
until [ $i -gt $num ] //只要i大于变量num就会跳出循环
do
sum=$(($sum + $i)) //每次循环sum都会加一次i
let i++ //每次i自加1
done
echo $sum //输出自定义变量num之前的所有的整数和
- 执行结果
3.实验三
求从1到100所有整数的偶数和、奇数和
#!/bin/bash
j=0 //定义一个奇数和
for i in {1..100..2} //是要for循环i的取值范围在1到100之间,步长为2,遍历循环
do
j=$[$i+$j] //每次奇数和j每次都会加+i
done
echo "奇数和为:$j " //输出奇数和
o=0 //定义一个偶数和
for a in {0..100..2} //是要for循环a的取值范围在2到100之间,步长为2,遍历循环
do
o=$[$a+$o] //每次奇数和j每次都会加+a
done
echo "偶数和为:$o " //输出偶数和
- 执行结果
4.实验四
用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码
#!/bin/bash
for username in $(cat /ky22/day2/user.txt) //把cat /ky22/day2/user.txt文件输出的结果输出到定义的变量username里
do
grep "^$username:" /etc/passwd &> /dev/null //过滤文件/ect/passwd以定义变量username开头的一行内容
if [ $? = 0 ];then //如果上一次命令执行结果的返回值是0的话,会输出用户已存在
echo "${username}用户已存在"
res=$(cat /etc/shadow | grep $username | awk -F: '{print $2}')
//把cat /etc/shadow | grep $username | awk -F: '{print $2}输出的结果赋给res
//把cat /etc/shadow输出的结果用管道符交给后面处理过滤出来用户名的这一行,再使用awk过滤出来这一行的第二个位置变量
if [ "$res" == "!!" ] || [ -z "$res" ];then //如果res等于!!或为空
read -p "${username}用户没有密码,请输入密码:" pass //就会提示输入密码
echo "$pass" | passwd --stdin $username &> /dev/null //设置密码
fi
else //否则就会创建新的用户
echo "用户不存在,正在创建${username}用户......"
useradd $username &> /dev/null
a=1
while [ $a -eq 1 ] //当a=1时
do
read -p "请设置用户$username 的密码:" passwd1 //输入密码
read -p "请再次输入用户$username 的密码:" passwd2 //确认密码
if [ "$passwd1" == "$passwd2" ];then //如果输入的两个密码一致的话,就会添加密码,否则就会让你重新输入,直到一致为止
echo $passwd1 | passwd --stdin $username &> /dev/null
let a++
else
echo "密码设置不一致"
fi
done
echo "$username"用户和密码创建成功
fi
done
- 执行结果
5.实验五
检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
#!/bin/bash
for ((i=0;i<=254;i++)) //给变量赋值、取值范围和迭代范围
do
{ //{...}& 代表是将每个循环操作的进程放到后台执行,且后台不区分前后顺序
ping -c 3 -w 3 172.16.100.$i &> /dev/null //ping 172.16.100.0段所有IP
if [ $? -eq 0 ];then //如果返回值等于0,输出is online
echo "172.16.100.$i is online" >> /opt/host_ip
fi
}&
done
wait //wait命令用于等待上面所有后台程序都执行完毕后再执行后面的shell语句
cat /opt/host_ip
- 执行结果
6.实验六
用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
mima=123456 //正确密码
for i in {1..3} //密码次数取值范围,超过三次就会直接退出
do
read -p "输入密码:" ps //提示信息
if [ $ps = $mima ];then //如果输入信息和正确密码一样就会输出正确
echo "正确!"
exit
fi
done
echo "密码输入三次,无法进入!"
- 执行结果
7.实验七
使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
#!/bin/bash
read -p "请输入一个0-255之间的整数:" num
for i in {128,64,32,16,8,4,2,1} //i的取值范围为:2的0次方 到 大小最接近255的2的次方
do
a=$[ num - i ] //定义一个变量a a=输入的值减去i的值
if [ $a -lt 0 ];then //如果输入的值减i小于0那么就输出0
echo -n 0 不换行输出0
else //如果输入的值减i大于等于0那么就输出1
echo -n 1 //不换行输出1
num=$[ num - i ] //给num赋新值为输入的值减去i的得数
fi
done
echo""//换行输出
- 执行结果