目录
第一题
第二题
第三题
第四题
第五题
第六题
第七题
第八题
第一题
计算从1到100所有整数的和
#!/bin/bash #计算从1到100所有整数的和 for i in {1..100} do let sum+=$i #sum=$[$sum +$i] done echo "1到100所有整数的和为:$sum"
循环里面一定不能写成sum+=$i,这是字符串的追加 ,我们要实现的是循环相加
第二题
提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
#!/bin/bash #提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和 read -p "请输入一个小于100的整数:" num for ((i=0;i<=$num ;i++)) #for i in $(seq 1 $num) do #sum=$[$sum+$i] let sum+=$i done echo "$num 以内的求和:$sum"
第三题
求从1到100所有整数的偶数和、奇数和
法一:
#!/bin/bash #求从1到100所有整数的偶数和、奇数和 for i in $(seq 1 2 100) do #sum=$[sum+i] let sum1+=$i done echo "100以内的奇数和:$sum1" for i in $(seq 0 2 100) do #sum=$[sum+i] let sum2+=$i done echo "100以内的偶数和:$sum2"
法二:
#!/bin/bash #求从1到100所有整数的偶数和、奇数和 for i in $(seq 1 100) do a=$[i % 2] if [ $a -eq 0 ] then let sum1+=$i #取余等于0是偶数 else let sum2+=$i #取余等于1是奇数 fi done echo "100以内的奇数和:$sum2" echo "100以内的偶数和:$sum1"
第四题
用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在; 若该用户不存在,提示用户输入密码,建立用户并设立其密码
#!/bin/bash #用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存>在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其>密码 for USER in $(cat /data/users.txt) do useradd $USER &> /dev/null if [ $? -ne 0 ] then echo "$USER 用户已经存在" else passwd $USER #echo "000000" | passwd --stdin $USER &> /dev/null echo "$USER 创建成功,并设置了密码" fi done
加一个功能:若用户存在但没设置密码,提醒用户设置密码
#!/bin/bash #若用户存在但没设置密码,提醒用户设置密码 for USER in $(cat /data/users.txt) do #可以用su、id、passwd第一列判断用户是否存在 cat /etc/passwd | awk -F: '{print $1}'|grep "$USER" &>/dev/null #查看passwd文件,以冒号为分割,打印第一列,过滤下有没有用户已经存在 if [ $? -eq 0 ] then echo "$USER 用户已经存在" res=$(cat /etc/shadow |grep "$USER" |awk -F: '{print $2}') #根据shadow文件判断该用户是否有密码 if [ "$res" = '!!' -o "$res" = '*' ] #感叹号会被双引号识别为特殊字符,所以我们用单引号 then echo "$USER 没有设置密码" read -p "请输入密码:" passwd echo $passwd |passwd --stdin $USER fi else echo "用户不存在,正在创建$USER 用户..." useradd $USER read -p "请设置用户的密码:" passwd1 read -p "请再次设置用户的密码:" passwd2 if [ "$passwd1" = "$passwd2" ] then echo $passwd1 |passwd --stdin $USER else echo "密码设置不一致" fi fi done
第五题
检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
#!/bin/bash #检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中 for host in {1..5} do ping -c 3 -i 0.5 -w 2 192.168.109.$host &> /dev/null #-c ping的次数 #-i 间隔时间 #-w 等待时间 #/dev/null 垃圾桶 if [ $? -eq 0 ] then echo "192.168.109.$host is online" >> /data/host_ip fi done
第六题
用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash #用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息, 连续输错3次则报警 for i in {1..3} do read -p "请输入密码:" num if [ $num != "123456" ] then echo "密码错误,请重新输入!" else echo "密码正确!" break fi if [ $i -eq 3 ] then echo "告警,密码输错三次!" fi done
第七题
编写能够自动生成一个6位随机密码的脚本
#!/bin/bash #随机生成6位随机密码 #定义密码取值范围 String="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" #循环8次 for i in {1..6} do #每次循环随机获取0到字符串长度-1的下标值 num=$[RANDOM % ${#String}] #进行字符串截取 var=${String:num:1} #每次追加生成密码 passwd+=$var done echo "本次生成的随机密码为:$passwd"
第八题
使用循环语句将一个 0到255 之间的十进制数转换成二进制数
法一:使用内置函数,此方法不能输出8位
#!/bin/bash #使用循环语句将一个 0到255 之间的十进制数转换成二进制数,使用内置函数 for ((a=0;a<=255;a++)) do b=$(echo "obase=2;$a"|bc) echo " $a十进制数转换成二进制数为: $b" done
法二:减法转换
#!/bin/bash read -p "请输入一个0-255之间的整数:" num for i in {128,64,32,16,8,4,2,1} #i的取值范围 do a=$[num - i] #a用来确定是否可以num减相应的i if [ $a -lt 0 ] #a小于0说明不能减 then echo -n 0 #-n代表不换行输出,输出0 else echo -n 1 num=$[num - i] #可以减输出1 fi done echo "" #换行
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
法三:
#!/bin/bash read -p "请输入一个0-255之间的整数:" num for i in {1..8} do var=$[num % 2] sum=$var$sum #字符串追加 num=$[num / 2] #自除2 done echo $sum