ベーススクリプト

40954 ワード

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.10個の乱数を生成し、比較する
 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.後続の6文字列:efbaf 275 cd、4 be 9 c 40 b 8 b、44 b 2395 c 46、f 8 c 8873 ce 0、b 902 c 16 c 8 b、ad 865 d 2 f 63は、乱数変数RANDOMに対してランダムにコマンドを実行する:echo$RANDOM|md 5 sum|cut–c 1-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文字を加えて、例えば:1 AbCdeFgH.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.ユーザーuser 1-user 10を10人追加し、パスワードは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
passwd:$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.
" 10 else 11 echo -e "Sorry, the input is too big.
" 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 "
Start detection at `date` o'clocki
" >> /data/host_up.log 10 echo -e "
Start 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.パラメータとして2つ以上の数値を使用して、最大値と最小値を表示
 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、例えばK 34 filename stop S 66 filename 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`
" 7 elif [[ "$file" != "0" ]];then 8 echo -e "$file not file
" 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