基礎腳本

来源:https://www.cnblogs.com/cloud-zeng/archive/2019/09/24/11581740.html
-Advertisement-
Play Games

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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對try catch finally的理解1.finally 總是會運行的,即使在catch中thorw拋出異常了。2.finally 在 return後沒有結束,而是繼續運行finally2.順序的話就是對try-》finally 或者 try-》catch-》finally不管怎樣finally ...
  • @[toc] 前言 中秋過完不知不覺都已經快兩周沒動這個工程了,最近業務需要總算開始搞後臺雲服務了,果斷直接net core搞起,在做的中間遇到了不少問題,這個後續會一點點列出來包括解決方法,今天就先把之前挖的坑填一個。 Redis 之前在緩存那篇提到過, Cookie , Session , Ca ...
  • Controller繼承ControllrBase,ControllerBase繼承IController,而IController里只有一個Execute方法 1、ControllrBase里的Execute(),裡面調用了ExecuteCore(),而ExecuteCore()是個抽象方法,抽象 ...
  • 上一章介紹了配置的多種數據源被註冊、載入和獲取的過程,本節看一下這個過程系統是如何實現的。(ASP.NET Core 系列目錄) 一、數據源的註冊 在上一節介紹的數據源設置中,appsettings.json、命令行、環境變數三種方式是被系統自動載入的,這是因為系統在webHost.CreateDe ...
  • 這裡分析一下RT-Thread中串口DMA方式的實現,以供做新處理器串口支持時的參考。 背景 在如今的晶元性能和外設強大功能的情況下,串口不實現DMA/中斷方式操作,我認為在實際項目中基本是不可接受的,但遺憾的是,rt-thread現有支持的實現中,基本上沒有支持串口的DMA,文檔也沒有關於串口DM ...
  • IP地址簡介 IP地址分類 特殊地址 子網掩碼的劃分 子網劃分的推薦思路 實例: Linux網卡配置介紹 添加IP地址192.168.2.2/24到eth0網卡上 Linux管理工具 ...
  • 編寫腳本實現傳入進程pid,查看對應進程/proc下CPU、記憶體指標 編寫腳本實現每分鐘檢查一個主機埠是否存活(提示使用nmap),如果檢查到埠不線上, sleep 10s ,如果三次都不存在,記錄到日誌 判斷參數文件是否為一個以.sh為尾碼的文件,如果是,加執行許可權,如果不是,提醒用戶 編寫腳 ...
  • 系統:windows 需求:測試多台PC輸出三個網站並行ping、tracert結果,多台PC同時進行。 說明:以www.baidu.com、www.sina.com.cn、www.tencent.com為例。 創建ping-tracer、www.baidu.com、www.sina.com.cn、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...