1. 程式人生 > >shell指令碼除錯中開啟set選項

shell指令碼除錯中開啟set選項

 設定除錯選項概覽

短符號 長符號 結果
set -f set -o noglob 禁止特殊字元用於檔名擴充套件。
set -v set -o verbose 列印讀入shell的輸入行。
set -x set -o xtrace 執行命令之前列印命令。

我們在除錯shell指令碼的時候,不可以避免的會遇到問題,這個時候,假如我們可以跟蹤到指令碼到底是哪裡問了問題,是哪個變量出了問題,這樣就對我們的除錯是很有幫助的,這裡介紹一個shell裡面的跟蹤選項這裡介紹的是set命令,假設在腳本里面加入set –x ,就能顯示指令碼執行是的冗餘輸出,如果在指令碼檔案中加入了命令set –x ,那麼在set命令之後執行的每一條命令以及載入命令列中的任何引數都會顯示出來,每一行都會加上加號(+),提示它是跟蹤輸出的標識,在子shell中執行的shell跟蹤命令會加2個叫號(++)。

下面來看看演示指令碼:

   1:  [[email protected] shell]# cat set-x.sh
   2:  #!/bin/bash
   3:  #set -x
   4:  echo -n "Can you write device drivers?"
   5:  read answer
   6:  answer=$(echo $answer | tr [a-z] [A-Z])
   7:  if [ $answer = Y ]
   8:  then
   9:          echo "Wow,you must be very skilled"
  10:  else
  11:          echo "Neither can I,I am just an example shell script"
  12:  fi
  13:  [[email protected] shell]# sh set-x.sh
  14:  Can you write device drivers?y
  15:  Wow,you must be very skilled
  16:  [[email protected] shell]# sh set-x.sh
  17:  Can you write device drivers?n
  18:  Neither can I,I am just an example shell script
  19:  [[email protected] shell]#

上面的指令碼內容裡面,我吧set –x  這一行註釋掉了,我們平時都是看到這種效果,下面我將把set –x 這個選項開啟,來看看效果:

   1:  [[email protected] shell]# sh set-x.sh
   2:  + echo -n 'Can you write device drivers?'
   3:  Can you write device drivers?+ read answer
   4:  y
   5:  ++ echo y
   6:  ++ tr '[a-z]' '[A-Z]'
   7:  + answer=Y
   8:  + '[' Y = Y ']'
   9:  + echo 'Wow,you must be very skilled'
  10:  Wow,you must be very skilled
  11:  [[email protected] shell]# sh set-x.sh
  12:  + echo -n 'Can you write device drivers?'
  13:  Can you write device drivers?+ read answer
  14:  n
  15:  ++ echo n
  16:  ++ tr '[a-z]' '[A-Z]'
  17:  + answer=N
  18:  + '[' N = Y ']'
  19:  + echo 'Neither can I,I am just an example shell script'
  20:  Neither can I,I am just an example shell script
  21:  [[email protected] shell]#

   嘿嘿,看到了吧,每一行都顯示出來,每一個引數的狀態和執行到哪一步的值是多少,都可以看的很清楚了吧,我們可以很清楚的看到answer這個變數的每一步的狀態和值,如果感興趣,來試驗下吧,這個選項

相關推薦

shell指令碼除錯開啟set選項

 設定除錯選項概覽 短符號 長符號 結果 set -f set -o noglob 禁止特殊字元用於檔名擴充套件。 set -v set -o verbose 列印讀入shell的輸入行。 set -x set -o xtrace 執行命令之前列

shell指令碼除錯心得

1 將指令碼產生的結果檔案和臨時檔案放入自己的資料夾下,不要放在原來的地方,好一起檢視 2 在除錯的時候,可以吧臨時檔案的刪除命令註釋掉,檢視臨時檔案具體的生成形式 3 在除錯的不明白的地方 用echo $var 4 用日誌txt,儲存echo的記錄和錯誤記錄 sh /xusywap.s

【linux】shell指令碼除錯技術

在使用gcc編譯keepalived原始碼的時候,需要執行configure生成Makefile,然後用make命令編譯。但是在這個過程中,configure檔案卻一直無法掃描到一個已經安裝的三方庫。無奈,只能檢視configure原始碼。configure其實就是一個shell指令碼,為了

shell指令碼檔案for迴圈的兩種寫法

#!/bin/bash for (( i = 0; i <= 10; i++ )) ; do echo "The value is: $i" done echo -e "\nJourneys end in lovers' meeting."

shell指令碼實現定時開啟Apache服務

寫shell指令碼 #! /bin/bash case $1 in start) systemctl start httpd if [ $? -eq 0 ] t

Shell指令碼除錯技巧

本文全面系統地介紹了shell指令碼除錯技術,包括使用echo, tee, trap等命令輸出關鍵資訊,跟蹤變數的值,在指令碼中植入除錯鉤子,使用“-n”選項進行shell指令碼的語法檢查, 使用“-x”選項實現shell指令碼逐條語句的跟蹤,巧妙地利用shell的內建變數增強“-x”選項的

shell指令碼除錯模式(debug模式)

linux shell的除錯模式在實際應用中有很大作用,其啟用方式有多種,總結如下 1. 在呼叫指令碼的時候使用      sh  +引數   +指令碼名 sh -x shell.script [[email&

總結三種Shell指令碼程式設計避免SFTP輸入密碼的方法

最近程式設計中用到sftp上傳檔案,且需要用crontab預設定時上傳事件。而sftp不同於ftp,沒有提供選項如 -i 可以將密碼直接編碼程序序。使用sftp指令,會自動請求使用者輸入密碼。 總結一下可以避免sftp輸入密碼的三種方式: 1. lftp方式 LFTP

Shell指令碼 centOS7自動安裝JDK

#切換到root許可權 sudo su #create java dir java_file="/usr/local/java" if [ ! -d "$java_file" ]; then  mkdir $java_file fi cd /usr/local/j

shell指令碼除錯技術(轉)

本文全面系統地介紹了shell指令碼除錯技術,包括使用echo, tee, trap等命令輸出關鍵資訊,跟蹤變數的值,在指令碼中植入除錯鉤子,使用“-n”選項進行shell指令碼的語法檢查,使用“-x”選項實現shell指令碼逐條語句的跟蹤,巧妙地利用shell的內建變數增強

Shell指令碼除錯方法

Shell提供了一些用於除錯指令碼的選項,如: -n 讀一遍指令碼中的命令但不執行,用於檢查指令碼中的語法錯誤。 -x 提供跟蹤執行資訊,將執行的每一條命令和結果依次打印出來。 -v 一邊執行指令碼,一邊將執行過的指令碼命令列印到標準錯誤輸出(我理解的應該是為了達到無緩衝的目的)。

Shell程式設計-自定義函式和shell指令碼除錯

1.自定義函式函式代表著一個或一組命令的集合,表示一個功能模組,常用於模組化程式設計一下是關於函式的重要說明    在shell中,函式必須先定義,再呼叫    使用 return value來獲取函式的返回值    函式在當前shell中執行,可以使用指令碼中的變數函式的格

shell指令碼程式設計for while until三種迴圈的使用方法

最後要介紹的是 shell script 設計中常見的"迴圈"(loop)。所謂的 loop 就是 script 中的一段在一定條件下反覆執行的程式碼。 bash shell 中常用的 loop 有如下三種: * for * while * until for l

shell指令碼除錯 -- 執行日誌1

# mymod_log while [[ ! -z "$1" ]];do# echo "arg: $1";     case "$1" in         "noall")             sed -e '/^\([ \t]*\)mydebug/d'\                 -e

shell指令碼程式的部分常用環境變數和引數變數的說明以及簡單shell指令碼示例

環境變數 $HOME 當前使用者的家目錄$PATH 以冒號分隔的用來搜尋命令的目錄列表$PS1 命令提示符,通常是$字元,但在bash中,可以使用一些更復雜的值。例如,字串[\[email protected]\h\w]$就是一個流行的預設值,它給出使用者名稱/機

shell 指令碼set -e選項作用範圍

        編寫shell指令碼沒多久,對於其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用指令碼去實現。其中就有用到set -e選項。         在用這個命令之前,也查過其功能,描述比較簡單:就是當命令以非零狀態退出時,則退出shell。主要作用是,當指令

如何在 Linux 啟用 Shell 指令碼除錯模式【轉】

指令碼是儲存在一個檔案的一系列命令。在終端上輸入一個個命令,按順序執行的方法太弱了,使用指令碼,系統中的使用者可以在一個檔案中儲存所有命令,反覆呼叫該檔案多次重新執行命令。 在學習指令碼或寫指令碼的初期階段,我們通常從寫小指令碼或者幾行命令的短指令碼開始,除錯這樣的指令

如何在 Shell 指令碼執行語法檢查除錯模式【轉】

我們開啟了 Shell 指令碼除錯系列文章,先是解釋了不同的除錯選項,下面介紹如何啟用 Shell 除錯模式。 寫完指令碼後,建議在執行指令碼之前先檢查指令碼中的語法,而不是檢視它們的輸出以確認它們是否正常工作。 在本系列的這一部分,我們將瞭解如何使用語法檢查除錯模式

shell指令碼使用getopts處理多命令列選項

在Linux系統中,許多命令都提供了選項,使用不同的選項就會得到不通的執行結果例如:ls命令,ls命令提供了多個選項:-l、-a、-A、-h、-i等等,每個選項具有不同的功能,我們自己寫指令碼時也可以定義選項,提示使用者如何使用,本文介紹如何使用getopts命令來處理命令選

shell指令碼使用for迴圈開啟並行方法

大家經常使用for迴圈來給指定指令碼輸入引數,按照引數的輸入順序指令碼順序執行,如以下指令碼:for (( i = 1; i <= 999; i++ )) do sh diaoyong.sh $i done把1-999不停輸入diaoyong.sh指令碼中,該指令碼