Linux shell腳本編程(二)

来源:http://www.cnblogs.com/hackerer/archive/2016/03/01/5229697.html
-Advertisement-
Play Games

Linux shell腳本編程(二) 1 練習:求100以內所有偶數之和; 2 使用至少三種方法實現; 3 4 示例1: 5 6 #!/bin/bash 7 # 8 declare -i sum=0 #聲明一個變數求和,初始值為0 9 10 for i in $(seq 0 2 100); do 1


Linux shell腳本編程(二)

 

  1  練習:求100以內所有偶數之和;
  2 使用至少三種方法實現;
  3 
  4 示例1:
  5 
  6 #!/bin/bash
  7 #
  8 declare -i sum=0        #聲明一個變數求和,初始值為0
  9 
 10 for i in $(seq 0 2 100); do
 11     sum=$(($sum+$i))
 12 done
 13 
 14 echo "Even sum: $sum."
 15 
 16 示例2:
 17 
 18 #!/bin/bash
 19 #
 20 declare -i sum=0
 21 
 22 for i in {1..100}; do
 23     if [ $[$i%2] -eq 0 ]; then
 24        sum=$[$sum+$i]
 25     fi
 26 done
 27 
 28 echo "Even sum: $sum."
 29 
 30 增強型賦值:
 31   +=
 32     sum=$[$sum+$i]
 33     let sum+=$i
 34   -=,*=,/=,%=,
 35 
 36     let count=$[$conunt+1] -->let count+=1-->let count++
 37     let count=$[$conunt-1] -->let count-=1-->let count--
 38 
 39 
 40 示例:顯示/etc目錄下所有的每個普通文件,而後統計一共有多少個這樣的文件;
 41 
 42 #!/bin/bash
 43 #
 44 declare -i count=0
 45 
 46 for file in /etc/*; do
 47     if [ -f $file ]; then
 48          let count++
 49          echo "$count $file"
 50     fi
 51 done
 52 
 53 echo "Total: $count files."
 54 
 55 
 56 測試表達式:
 57     整數測試;-gt,-lt,-ge,-le,-eq,-ne
 58     字元串測試:==,>,<,!=,-z,-n,=~
 59 
 60     註意:
 61     (1)字元串等會比較測試[ "$hostname" == 'localhost' ]
 62    (2)模式匹配測試:[[ "STRING" -~ PATTERN ]]
 63 
 64      示例:寫一個腳本實現如下功能;
 65        獲取當前主機的主機名:
 66            如果當前主機的主機名為空,或者為localhost,則將其修改為www.mageedu.com
 67 
 68     組合測試條件:
 69         條件間邏輯運算:
 70             與:多個條件要同時滿足;
 71             或:多個條件滿足其一即可;
 72             非:對指定的條件取反;
 73 
 74         表達式組合:
 75             與:[[ CONDITION -a CONDITION2 ]]
 76             或:[[ CONDITION -o CONDITION2 ]]
 77             非:[ !CONDITION ]
 78 
 79         命令組合:
 80             與:COMMAND1 && COMMAND2 <-- [ EXPR1 ] && [ EXPR2 ]
 81             或:COMMAND1 || COMMAND2
 82             非:!COMMAND
 83 
 84             false && true = false
 85             false && false = false
 86 
 87             true && false = true
 88             true && true = true
 89 
 90             if COMMAND; then
 91                COMMAND2
 92             fi
 93          短路操作符:
 94             true || true = true
 95             true || false = true
 96 
 97             false || true = true
 98             false || false = false
 99 
100           if ! COMMAND1; then
101               COMMAND2
102           fi
103 
104           COMMAND1 && COMMAND2 || COMMAND3
105               if COMMAND1;then
106                    COMMAND2
107               else
108                    COMMAND3
109               fi
110 
111     獲取當前主機的主機名:
112            如果當前主機的主機名為空,或者為localhost,則將其修改為www.mageedu.com
113 
114 #!/bin/bash
115 #
116 hostname=$(hostname)
117 
118 if [ -z "$hostname" -o "$hostname"=="localhost" ]; then
119    hostname www.magedu.com
120 fi
121 
122 練習:寫一個腳本
123 (1)傳遞兩個文本文件路徑給腳本;
124 (2)顯示兩個文件中空白行數較多的文件及其空白行的個數;
125 (3)顯示兩個文件中總行數較多的文件及其總行數;
126 練習:寫一個腳本
127 (1)提示用戶輸入一個字元串;
128 (2)判斷:
129      如果輸入的是quit,則退出腳本;
130      否則,則顯示其輸入的字元串內容;
131 
132  練習:寫一個腳本,列印九九乘法表:
133     迴圈嵌套
134 
135 #!/bin/bash
136 #
137 for j in {1..9}; do
138    for i in $(seq 1 $j); do
139       echo -n -e "${i}X${j}=$[$i*$j]\t"
140    done
141    echo
142 done
143 
144 多分支的if語句:
145      單分支:
146          if CONDITION; then
147              if-true-分支
148          fi
149      雙分支:
150          if CONDITION; then
151              if-true-分支
152          else
153              if-false-分支
154          fi
155 
156     多分支:
157          if CONDITION1; then
158             if -CONDITION-true-分支
159         elif CONDITION2; then
160             if-CONDITION2-true-分支
161         ...
162         else
163             if-ALL-false-分支
164         fi
165 
166  示例:通過腳本參數傳遞一個文件路徑給腳本,判斷其類型:
167 
168  #!/bin/bash
169 #
170 if [ $# -lt 1 ]; then
171    echo "Usage: $0 <path>"
172    exit 1
173 fi
174 
175 if [ -f $1 ]; then
176    echo "Rgulat file."
177 elif [ -d $1 ]; then
178    echo "Directory."
179 elif [ -h $1 ]; then
180    echo "Symbolic link."
181 elif [ -b $1 ]; then
182    echo "Block special."
183 elif [ -c $1 ]; then
184    echo "Charactoer special."
185 elif [ -S $1 ]; then
186    echo "Socket file."
187 else
188    echo "file not exist or unknow type."
189 fi
190 
191 示例:腳本可接受四個參數
192    start:創建文件/var/lock/subsys/SCRIPT_NAME
193    stop:刪除此文件
194    restatr:刪除此文件並重新創建
195    status:如果文件存在,顯示為“running”;否則,顯示為“stopped”
196 
197    basename命令:
198       取得路徑的基名:
199 示例:
200 
201 #!/bin/bash
202 #
203 prog=$(basename $0)
204 lockfile="/var/lock/subsys/$prog"
205 #echo $lockfile
206 
207 if [ $# -lt 1 ]; then
208    echo "Usage: $prog start|stop|restart|status"
209    exit 1
210 fi
211 
212 if [ "$1" == "start" ]; then
213     if [ -f $lockfile ]; then
214         echo "$prog is started yes."
215     else
216        touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
217     fi
218 elif [ "$1" == "stop" ]; then
219     if [ -f $lockfile ]; then
220         rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
221     else
222         echo "$prog is stopped yet."
223     fi
224 elif [ "$1" == "restart" ]; then
225     if [ -f $lockfile ]; then
226         rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
227     else
228         touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
229     fi
230 elif [ "$1" == "status" ]; then
231     if [ -f $lockfile ]; then
232         echo "Running..."
233     else
234         echo "Stopped..."
235     fi
236 else
237     echo "Usage: $prog start|stop|restart|status"
238     exit 1
239 fi
240 
241 case語句:
242     簡潔版多分支if語句:
243     使用場景:判斷某變數的值是否為多種情形中的一種時使用;
244 
245     語法:
246         case $VARIABLE in
247         PATTERN1)
248              分支1
249              ;;
250         PATTERN2)
251              分支2
252              ;;
253         PATTERN3
254              分支3
255              ;;
256         ...
257         *)
258              分支n
259              ;;
260         esac
261 
262         PATTERN可使用glob模式的通配符:
263            *:任意長度的任意字元;
264            ?:任意單個字元;
265            []:指定範圍內的任意單個字元;
266            a|b:多選1;
267 
268 示例:提示鍵入任意一個字元,判斷類型:
269 腳本如下:
270 #!/bin/bash
271 #
272 read -p "Plz enter a character: " char
273 
274 case $char in
275 [a-z])
276      echo "A character."
277      ;;
278 [0-9])
279      echo "A digit."
280      ;;
281 *)
282      echo "A special character."
283      ;;
284 esac
285 
286 示例:腳本可接受四個參數
287    start:創建文件/var/lock/subsys/SCRIPT_NAME
288    stop:刪除此文件
289    restatr:刪除此文件並重新創建
290    status:如果文件存在,顯示為“running”;否則,顯示為“stopped”
291 
292    腳本如下:
293 
294    #!/bin/bash
295 #
296 prog=$(basename $0)
297 lockfile="/var/lock/subsys/$prog"
298 #echo $lockfile
299 
300 if [ $# -lt 1 ]; then
301    echo "Usage: $prog start|stop|restart|status"
302    exit 1
303 fi
304 case $1 in
305 start)
306     if [ -f $lockfile ]; then
307         echo "$prog is started yes."
308     else
309        touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
310     fi
311     ;;
312 stop)
313     if [ -f $lockfile ]; then
314         rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
315     else
316         echo "$prog is stopped yet."
317     fi
318     ;;
319 restart)
320     if [ -f $lockfile ]; then
321         rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
322     else
323         touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
324     fi
325     ;;
326 status)
327     if [ -f $lockfile ]; then
328         echo "Running..."
329     else
330         echo "Stopped..."
331     fi
332     ;;
333 *)
334     echo "Usage: $prog start|stop|restart|status"
335     exit 1
336 esac

 


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

-Advertisement-
Play Games
更多相關文章
  • 本節主要介紹一下Pandas的數據結構,本文引用的網址:https://www.dataquest.io/mission/146/pandas-internals-series 本文所使用的數據來自於:https://github.com/fivethirtyeight/data/tree/mast...
  • HTTP 協議可能是現在 Internet 上使用得最多、最重要的協議了,越來越多的 Java 應用程式需要直接通過 HTTP 協議來訪問網路資源。在 JDK 的 java.net 包中已經提供了訪問 HTTP 協議的基本功能:HttpURLConnection。 HttpURLConnection
  • 最近我在用梯度下降演算法繪製神經網路的數據時,遇到了一些演算法性能的問題。梯度下降演算法的代碼如下(偽代碼): Python 1 2 3 def gradient_descent(): # the gradient descent code plotly.write(X, Y) 一般來說,當網路請求 pl
  • Java mkdirs()創建目錄實例 Java deleteDir() 刪除目錄實例 Java 如何判斷目錄是否為空 Java 使用file.isHidden() 方法來判斷文件是否隱藏 Java 獲取目錄大小實例 Java 查找指定目錄下的文件 Java 如何獲取文件的上級目錄 Java 獲取目
  • 示例闡述C++中的文件操作
  • 1.getgamedesc.sh 功能:插入gamedesc.txt文本中的,以“,”分割的第1列數據gid和第6列數據desc,到線網mysql資料庫中(當欄位$desc不為空時才執行插入)。 db_param="-h127.0.0.1 -uigame -pigame_admin" while r
  • 指針即地址。 1. 指針與變數。 2. 指針與數組。 3. 指針與字元串。 4. 指針與函數:指針函數(返回值為指針的函數)與函數指針(指向函數的指針)。 5. 指針數組與指向指針的指針。 6. 關於二維數組的指針 當我們定義int a[3][4] ;int (*p)[4]; 時,這時 p 與 a
  • 1 <?xml version="1.0" encoding="gbk"?> 2 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> 3
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...