欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

基础脚本

程序员文章站 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.生成十个随机数,并进行比较
 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
5.后续六个字符串: efbaf275cd、 4be9c40b8b、 44b2395c46、 f8c8873ce0、 b902c16c8b、 ad865d2f63是通过对随机数变量random随机 执行命令: echo $random|md5sum|cut –c1-10 后的结果,请破解这些 字符串对应的random值
 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