91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell編程中Shift的用法是什么

發布時間:2021-07-13 13:53:16 來源:億速云 閱讀:459 作者:chen 欄目:開發技術

這篇文章主要講解了“Shell編程中Shift的用法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Shell編程中Shift的用法是什么”吧!

位置參數可以用shift命令左移。比如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。不帶參數的shift命令相當于shift 1。
非常有用的 Unix 命令:shift。我們知道,對于位置變量或命令行參數,其個數必須是確定的,或者當 Shell 程序不知道其個數時,可以把所有參數一起賦值給變量$*。若用戶要求 Shell 在不知道位置變量個數的情況下,還能逐個的把參數一一處理,也就是在 $1 后為 $2,在 $2 后面為 $3 等。在 shift 命令執行前變量 $1 的值在 shift 命令執行后就不可用了。

示例如下:

#測試 shift 命令(x_shift.sh)
until [ $# -eq 0 ]
do
echo "第一個參數為: $1 參數個數為: $#"
shift
done
執行以上程序x_shift.sh:
$./x_shift.sh 1 2 3 4

結果顯示如下:

第一個參數為: 1 參數個數為: 4
第一個參數為: 2 參數個數為: 3
第一個參數為: 3 參數個數為: 2
第一個參數為: 4 參數個數為: 1

從上可知 shift 命令每執行一次,變量的個數($#)減一,而變量值提前一位,下面代碼用 until 和 shift 命令計算所有命令行參數的和。

#shift 上檔命令的應用(x_shift2.sh)
if [ $# -eq 0 ]
then
echo "Usage:x_shift2.sh 參數"
exit 1
fi
sum=0
until [ $# -eq 0 ]
do
sum=`expr $sum + $1`
shift
done
echo "sum is: $sum"

執行上述程序:

$x_shift2.sh 10 20 15

其顯示結果為:

45

  Shift 命令還有另外一個重要用途, Bsh 定義了9個位置變量,從 $1 到 $9,這并不意味著用戶在命令行只能使用9個參數,借助 shift 命令可以訪問多于9個的參數。

  Shift 命令一次移動參數的個數由其所帶的參數指定。例如當 shell 程序處理完前九個命令行參數后,可以使用 shift 9 命令把 $10 移到 $1。

擴展:Shell grep 命令擴展增強

背景: 線上排查問題需要找出有某個特征的日志,并獲取這些日志的完整調用日志鏈路。 

比如, 通過某個tag 獲取到了這些日志的 請求id 【Span ID】,

cat xxxx.log | grep '某tag' | awk  -F '某tag' '{print $2}'

然后還需要再一步取得所有SpanId的完整日志鏈。顯然目前我們需要使用 xargs 來批處理執行。 但這里有個問題。 grep 無法支持這種用法。

如下:

[localhost ~]$ cat xxxxxx.log | grep '某tag' | awk  -F '某tag' '{print $2}'  | xargs grep xxxxxx.log

grep: 某SpanId: No such file or directory

grep 第一個參數必須是 關鍵詞正則 ,其后跟隨文件路徑。

所以為了解決這個問題,我們需要使用一個改造后的SHELL腳本,這里命名為 grepx ,用于增強 grep 命令:

#!/bin/bash

FILE_PATH="$1*"

COUNT=0
while  [ $# -gt 0 ]
do
    if [ $COUNT -gt 0 ]
    then
        grep "$1" $FILE_PATH
        #輸出空白行用來隔斷日志   
       echo -e "\n\n"
    fi

    #shift命令用于對參數的移動(左移),通常用于在不知道傳入參數個數的情況下,依次遍歷每個參數
    shift
    let COUNT=COUNT+1
done

原理是對調參數位置, 再通過 shift 命令移動參數,批量讀取管道傳遞過來的參數,或者 控制臺傳遞的參數。

然后 shell 腳本便可以寫成如下:

cat xxxxxx.log | grep '某tag' | awk  -F '某tag' '{print $2}'  | xargs ~/grepx xxxxxx.log

感謝各位的閱讀,以上就是“Shell編程中Shift的用法是什么”的內容了,經過本文的學習后,相信大家對Shell編程中Shift的用法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定南县| 惠州市| 吐鲁番市| 绍兴县| 樟树市| 宁明县| 疏附县| 应城市| 长白| 耒阳市| 深圳市| 华坪县| 延庆县| 阿拉善左旗| 大丰市| 安仁县| 黄冈市| 修文县| 漳平市| 吴江市| 盐城市| 泗水县| 铜山县| 左权县| 岗巴县| 定陶县| 垣曲县| 溆浦县| 沁源县| 新密市| 天峻县| 铜梁县| 汤原县| 班玛县| 额济纳旗| 秦安县| 长治市| 孟津县| 紫阳县| 武乡县| 普陀区|