基础脚本
程序员文章站
2022-05-09 23:13:26
1.打印九九乘法口诀 1 for i in `seq 9` ;do 2 for j in `seq 9` ;do 3 if [ $i -ge $j ];then 4 let sum=${i}*${j} 5 echo -e "${i}x${j}=$sum\t\c" 6 fi 7 done 8 echo ......
1.打印九九乘法口诀
1 for i in `seq 9` ;do 2 for j in `seq 9` ;do 3 if [ $i -ge $j ];then 4 let sum=${i}*${j} 5 echo -e "${i}x${j}=$sum\t\c" 6 fi 7 done 8 echo 9 done
2.检查磁盘空间,一旦发现任何分区利用率高于80%,就发出警报
1 disk=`fdisk -l | egrep -o "^/dev/[[:alpha:]]+[0-9]"` 2 #disk=`lsblk | sed -rn "s/^├─([[:alpha:]]{3}[1-9]).*/\1/p"` 3 max_num=0 4 5 for name in `echo $disk`;do 6 #有可能是交换空间,df命令就没有显示。直接跳过 7 if ! df | egrep -o "^$name.*" &> /dev/null;then 8 continue 9 fi 10 #获取使用空间和inodes 11 num=`df | egrep -o "$name.*" | tr -s " " "%" | cut -d "%" -f 5` 12 inodes_num=`df -i | egrep -o "$name.*" | tr -s " " "%" | cut -d "%" -f 5` 13 #使用空间和inodes大于80就发出警告。 14 if [ $num -ge 80 -o $inodes_num -ge 80 ];then 15 if [ $num -gt $max_num ];then 16 max_num=$num 17 max_name=$name 18 max_inodes_num=$inodes_num 19 20 elif [ $num -eq $max_num ];then 21 max_equal_num=$num 22 max_equal_name=$name 23 max_equal_inodes_num=$inodes_num 24 fi 25 fi 26 done 27 #判断是否有超过80的 28 if [ $max_num -ne 0 ];then 29 let remaining=100-$max_num 30 let inodes_remaining=100-$max_inodes_num 31 32 #判断是否有两个分区使用量一样 33 if [ -z $max_equal_num ];then 34 wall the $max_name disk is about to run out, only the remaining disk is ${remaining}% and inodes${inodes_remaining}% 35 else 36 wall the $max_name and $max_equal_name disk is about to run out, only the remaining disk is ${remaining}% and inodes${inodes_remaining}% 37 fi 38 fi
3.打印国际象棋
1 for j in `seq 8`;do 2 if [ $[$j%2] -eq 0 ];then 3 for i in `seq 4`;do 4 echo -e "\e[41m \e[0m\e[43m \e[0m\c" 5 done 6 else 7 for i in `seq 4`;do 8 echo -e "\e[43m \e[0m\e[41m \e[0m\c" 9 done 10 fi 11 echo 12 done
4.生成十个随机数,并进行比较
5.后续六个字符串: efbaf275cd、 4be9c40b8b、 44b2395c46、 f8c8873ce0、 b902c16c8b、 ad865d2f63是通过对随机数变量random随机 执行命令: echo $random|md5sum|cut –c1-10 后的结果,请破解这些 字符串对应的random值
1 cat /dev/null > /tmp/suiji.txt 2 3 for i in {1..10};do 4 echo $random >> /tmp/suiji.txt 5 done 6 7 max=`cat /tmp/suiji.txt | sort -n | tail -n 1` 8 min=`cat /tmp/suiji.txt | sort -n | head -n 1` 9 10 echo all random is `cat /tmp/suiji.txt | xargs` 11 echo max is $max 12 echo min is $min 13 14 rm -rf /tmp/suiji.txt
1 for char in efbaf275cd 4be9c40b8b 44b2395c46 f8c8873ce0 b902c16c8b ad865d2f63;do 2 3 for num in `seq 32767`;do 4 k=`echo ${num} | md5sum | cut -c 1-10` 5 if [ $k == $char ];then 6 echo $num 7 break 8 fi 9 done 10 done
6.在/testdir目录下创建10个html文件,文件名格式为数字n(从1到10)加随机8个字 母,如: 1abcdefgh.html
for i in `seq 10`;do #生成8个字母 name=`openssl rand -base64 20 | grep -o "[[:alpha:]]" | head -n 8 | xargs | tr -d " "` #控制数字1~10 while true;do num=$[$random%11] if [ $num -ne 0 ];then break fi done #创建文件 touch /testdir/$num$name.html done
7.添加10个用户user1-user10,密码为8位随机字符
1 for user in `echo test{1..10}`;do 2 3 id $user &> /dev/null && echo "$user exist" && continue 4 useradd $user 5 pass=`openssl rand -base64 12 | cut -c 1-10` 6 echo $pass | passwd --stdin $user &> /dev/null 7 echo -e "user:$user\npasswd:$pass" 8 9 done
8.计算100以内所有能被3整除的整数之和
1 sum=0 2 for num in `seq 100`;do 3 if [ $[$num%3] -eq 0 ];then 4 let sum+=$num 5 fi 6 done 7 echo "sum=$sum"
9.编写脚本,提示输入正整数n的值,计算1+2+…+n的总和
1 read -p "please enter 1 to add to? : " n 2 sum=0 3 4 for num in `eval seq $n`;do 5 let sum+=$num 6 done 7 8 echo "sum=$sum"
10.判断/var/目录下所有文件的类型
1 read -p "please enter the directory to be judged: " dir 2 3 if [[ "`echo $dir | sed -rn "s/^.*(.)$/\1/p"`" != "/" ]];then 4 if [[ ! -f $dir ]];then 5 dir=$dir/ 6 else 7 echo -e "\e[31mplease enter the directory\e[0m" 8 exit 9 fi 10 fi 11 12 for file in `ls $dir`;do 13 if [[ -f $dir$file ]];then 14 echo "$file is file" 15 elif [[ -d $dir$file ]];then 16 echo "$file is direction" 17 elif [[ -c $dir$file ]];then 18 echo "$file is character" 19 elif [[ -l $dir$file ]];then 20 echo "$file is link" 21 else 22 echo "unknown type" 23 fi 24 done
11.生成0-10的一个数,猜数字
1 i=$[$random%11] 2 while true;do 3 read -p "please enter a lucky number(0-10): " num 4 5 if [ $i -eq $num ];then 6 echo "congratulations, you guessed it." 7 exit 8 elif [ $num -lt $i ];then 9 echo -e "sorry, the input is too small.\n" 10 else 11 echo -e "sorry, the input is too big.\n" 12 fi 13 done
12.编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
1 read -p "enter the ip address segment to be detected. such as 192.168.100.0: " ip 2 net=`echo $ip | sed -nr "s/^(([0-9]{1,3}\.){3}).*/\1/p"` 3 4 if [[ -z $net ]];then 5 echo -e "\e[31mplease enter a reasonable ip address\e[0m" 6 exit 7 fi 8 9 echo -e "\nstart detection at `date` o'clocki" >> /data/host_up.log 10 echo -e "\nstart detection at `date` o'clocki" >> /data/host_down.log 11 12 i=1 13 while [ $i -le 10 ];do 14 if ping -c 1 -w 1 $net$i &> /dev/null;then 15 echo $net$i is up >> /data/host_up.log 16 else 17 echo $net$i is down >> /data/host_down.log 18 fi 19 let i++ 20 done
13.每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户登录, 则将登录时间和主机记录于日志/data/login.log中,并退出脚本
1 read -p "input needs to monitor users: " user 2 while true ; do 3 if who | grep "^$user" > /dev/null ;then 4 echo "$user is logging in at `date '+%f %t'`" >> /data/login.log 5 exit 6 fi 7 sleep 3 8 done
14.用二个以上的数字为参数,显示其中的最大值和最小值
1 for((i=1;i<=10;i++));do 2 3 read -p "enter the number to compare(enter end input): " num_$i 4 val=`eval echo '$'num_$i` 5 6 if [[ -z $val ]];th 7 break 8 fi 9 10 [ $i -eq 1 ] && max=$val 11 [ $i -eq 2 ] && min=$val 12 13 if [ $max -le $val ];then 14 max=$val 15 fi 16 17 [ $i -ge 2 ] && if [ $min -ge $val ];then min=$val ;fi 18 done 19 20 echo "max=$max;min=$min"
15.求100以内所有正奇数之和
1 odd_num=0 2 even_num=0 3 4 i=1 5 while [ $i -le 100 ];do 6 if [ $[$i%2] -eq 0 ];then 7 let even_num+=i 8 else 9 let odd_num+=i 10 fi 11 let i++ 12 done 13 14 echo odd number is $odd_num 15 echo even is $even_num
16.判断用户输入的参数是否为正整数
1 read -p "please enter a positive integer: " num 2 if [[ "$num" =~ ^[0-9]+$ ]];then 3 if [ $num -gt 0 ];then 4 echo "you are entering a positive integer." 5 else 6 echo "0 is not a positive integer" 7 fi 8 else 9 echo "you are not entering a positive integer" 10 fi
17./etc/rc.d/rc3.d目录下分别有多个以k开头和以s开头的文件;分别读取每个文件,以k开头的输出为文件加stop,以s开头的输出为文件名加start,如k34filename stop s66filename start
1 for file in `ls /etc/rc.d/rc3.d/`;do 2 3 if echo $file | sed -rn "s/^(s.*)$/\1/";then 4 echo "$file start" 5 elif echo $file | sed -rn "s/^(k.*)$/\1/";then 6 echo "$file stop" 7 fi 8 9 done
18.用文件名做为参数,显示其中的最大值和最小值
1 file=1 2 until [[ "$file" == "0" ]];do 3 read -p "please enter the file to be counted(0 exit script): " file 4 5 if [[ -f $file ]];then 6 echo -e "$file the total number of lines is `wc -l < $file`\n" 7 elif [[ "$file" != "0" ]];then 8 echo -e "$file not file\n" 9 fi 10 11 done
19.打印等腰三角形
1 read -p "please enter the height: " high 2 for row in `seq $high`;do 3 let num_1=$high-$row 4 let num_2=2*$row-1 5 6 for space in `seq $num_1`;do 7 echo -e " \c" 8 done 9 10 for star in `seq $num_2`;do 11 echo -e "*\c" 12 done 13 14 echo 15 done
20.编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
1 read -p "please enter yes or no: " input 2 3 if [[ "$input" =~ [yy]([ee][ss]){,1} ]];then 4 echo "your choice is yes" 5 elif [[ "$input" =~ [nn]([oo]]){,1} ]];then22:45:12 6 echo "your choice is no" 7 else 8 echo "your choice is neither yes nor no" 9 fi