詳解shell指令碼(二) 基礎篇中

2021-08-15 18:09:00 字數 1406 閱讀 5497

關於變數的小技巧

還有一些特殊的字元可以擴充套件成系統引數。例如: \u可以擴充套件為使用者名稱, \h可以擴充套件為主機名,而\w可以擴充套件為當前工作目錄。

fname;#執行函式

echo $1, $2; #訪問引數1和引數2

echo "$@"; #以列表的方式一次性列印所有引數

echo "$0"; #命令含命令所在的路徑

echo "$*"; #類似於$@,但是引數被作為單個實體

echo $?; #讀取命令返回值

echo $!; #輸出最近乙個後台程序的pid

& #shell將命令至於後台並繼續執行指令碼

新增環境變數函式

#實現方法如下:

#path和ld_library_path現在看起來應該像這樣:

#不過我們可以把下面的函式加入.bashrc-,讓一切變得更輕鬆些:

prepend() \" && export $1 ; }

#像下面這樣來使用該函式:

我們定義了名為prepend()的函式,它首先檢查該函式第二個引數所指定的目錄是否存在。如果存在, eval表示式將第乙個引數所指定的變數值設定成第二個引數的值加上「:」(路徑分隔符),隨後再跟上首個引數的原始值。

#在這個函式中,我們引入了一種shell引數擴充套件的形式:

$#如果parameter有值且不為空,則使用expression的值

把錯誤流和輸出流輸出到同乙個檔案

#命令的退出狀態可以用$?獲得。非0就是失敗

cmd 2>&1 output.txt

cmd &> output.txt

把命令定向到檔案

cat a* | tee out.txt | cat -n

#在上面的**中,tee命令接收到來自stdin的資料,它將stdout的乙份副本寫入到檔案out.txt中,同時將另乙份副本作為後續命令的stdin.命令cat -n將從stdin中接受到的每一行資料前加上行號寫入stdout

#stderr的內容不會出現,tee只能從stdin中讀取

#tee -a 可以在檔案中追加內容而不是覆蓋

#>和》不同,兩者都可以把檔案重定向到檔案,但是前者會先清空檔案,然後再寫入內容,而後者會將內容追加到現有的檔案的尾部。

自定義檔案描述符

#使用exec命令建立自己的檔案描述符。檔案開啟方式有三種,1:唯讀2:截斷寫入3:追加寫入

#建立乙個檔案描述符進行檔案讀取:

exec 3output.txt

echo newline >&4

#建立乙個檔案描述符用於寫入(追加模式)

exec 5>>input.txt

shell中基礎指令碼

shell 指令碼 shell script 是一種為 shell 編寫的指令碼程式。業界所說的 shell 通常都是指 shell 指令碼,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。由於習慣的原因,簡潔起見,本文出現的 shell程式設計 都是指 shell 指...

shell基礎篇(十)shell指令碼的包含

前記 寫到這裡 shell中基礎差不多已經講完了。希望你已經對shell有了乙個基本了解。你可能躍躍欲試,要寫一些程式練習一下。這會對你很有好處。建議大家去chinaunix去學習 我是li0924.我會定期去上面做做題。是乙個很不錯的學習平台。可能那上面遇到最多的題目是awk sed的。當然還有對...

shell指令碼符號篇

hell執行指令碼 bin bash echo 這是乙個shell指令碼 shell指令碼中用 表示注釋,如果 位於第一 開頭 並且是則例外,它表 該指令碼使 後 指定的直譯器 bin sh解釋執 第一種執行方式 chmod x script.sh shell會 fork 乙個子程序並調 用 exe...