Linux Shell指令碼攻略1 小試牛刀 1

2021-08-07 22:49:27 字數 2796 閱讀 9281

shell指令碼通常是乙個以shebang(#!/bin/bash)起始的文字檔案,其中/bin/bash是bash的直譯器命令路徑。

shell指令碼有兩種執行方式:

另一種則是授予指令碼執行許可權,將其變為可執行檔案。

在bash中,每個命令或是命令序列是通過分號或換行符來分隔的,如$ cmd1;cmd2注釋部分以#開始,一直延續到行尾。

echo是用於終端列印的基本命令,在預設情況下,echo在每次呼叫後會在末尾新增乙個換行符。

echo列印文字有三種形式

三種方法各有些限制

使用不帶引號的echo時,沒法在所要顯示的文字中使用分號(?,因為分號在bash中會被識別為命令定界符。

使用單引號時,變數替換在單引號中無效。如下所示:

使用雙引號時,在不使用轉義字元()的情況下無法列印!符號。

另乙個可用於終端列印的命令是printf,printf使用的引數和c語言中的printf函式一樣,例如$ printf "hello world"。printf使用引用文字或由空格分隔的引數。

我們可以在printf中使用格式化字串,還可以指定字串的寬度、左右對齊方式等。在預設情況下,printf並不會像echo一樣自動新增換行符,我們必須在需要的時候手動新增,如:

#!/bin/bash

#檔名:printf.sh

printf

"%-5s %-10s %-4s\n" no name mark

printf

"%-5s %-10s %-4.2f\n" 1 sarath 80.3456

printf

"%-5s %-10s %-4.2f\n" 2 james 90.9989

printf

"%-5s %-10s %-4.2f\n" 3 jeff 77.564

執行上述指令碼,我們會得到如下輸出:

%s、%c、%d和%f都是格式替換符(format substitution character),其所對應的引數可以置於帶引號的格式字串之後。

在使用echo和printf的命令選項時,要確保選項應該出現在命令行內所有的字串之前,否則bash會將其視作另外乙個字串。

在預設情況下,echo會將乙個換行符追加到輸出文字的尾部,可以使用選項-n來忽略結尾的換行符,如$ echo -n "hello bash"

echo同樣接受雙引號字串內的轉義序列作為引數,如果需要使用轉義引數,需要使用-e選項。如$ echo -e "1\t2\t3"

指令碼語言通常不需要在使用變數之前宣告其型別,只需要直接賦值就可以。

在bash中,每乙個變數的值都是字串,無論給變數賦值時有沒有使用引號,值都會以字串的形式儲存。

有一些特殊的變數會被shell環境和作業系統環境用來儲存一些特別的值,這類變數稱為環境變數。

env命令可以檢視所有全域性環境變數。

set命令可以檢視所有環境變數。

unset命令可以針對當前會話刪除乙個變數。

環境變數的配置檔案

對於程序來說,其執行時的環境變數可以使用下面的命令來檢視:

變數賦值

在變數名之前加上$字首就可以列印出變數的內容。

我們可以在printf或echo命令的雙引號中引用變數值

環境變數是未在當前程序中定義,而從父程序中繼承而來的變數。例如環境變數http_proxy,定義了網際網路連線應該使用哪個**伺服器。

export命令用來設定環境變數,至此之後,從當前shell指令碼執行的任何應用程式都會繼承這個變數。

我們可以根據自己的需要,在執行的應用程式或者shell指令碼中匯出特定的變數,在預設情況下,有很多標準環境變數可供shell使用,path就是其中之一。

在給出所要執行的命令後,shell會自動在path環境變數所包含的目錄列表中(各目錄路徑之間以冒號間隔)查詢對應的可執行檔案。

還有一些眾所周知的環境變數,如

使用單引號時,變數不會被擴充套件,將依照原樣顯示,這意味著:

獲得字串長度

識別shell

超級使用者(root)的uid是0。

當我們開啟終端或是執行shell時,會看到類似於user@hostname:/home/$的提示字串。不同gnu/linux發布版中的提示及顏色略有不同。我們可以利用ps1環境變數來定製提示文字。 預設的shell提示文字是在檔案~/.bashrc中的某一行設定的。

有一些特殊的字元可以擴充套件成系統引數

在bash shell中,可以利用let、(())和執行基本的算術操作,而在進行高階操作時,expr和bc這兩個工具也會非常有用。

可以用普通的變數賦值方法定義數值,這時,它會被儲存為字串,然而我們可以用一些方法使它能像數字一樣進行運算。

let命令可以直接執行基本的算術操作,當使用let時,變數名之前不需要加$,如:

操作符的使用方法和let命令類似:

使用(())類似:

expr同樣可以用於基本算術操作:

let、(())和只能用於整數運算,不支援浮點數。

bc是乙個用於數**算的高階工具,這個精密計算器包含了大量的選項,我們可以借助它執行浮點數運算並應用一些高階函式。

其他引數可以置於要執行的具體操作之前,同時以分號作為定界符,通過stdin傳遞給bc。

計算平方以及平方根

Linux Shell指令碼攻略(三)

一.find命令 1.根據檔名或正規表示式匹配搜尋 2.基於目錄深度的搜尋 maxdepth mindepth 3.根據檔案型別搜尋 4.根據檔案時間搜尋 atime 訪問時間 mtime 修改時間 ctime 變化時間 eg find type f atime 7 print 最近7天訪問的檔案 ...

linux shell指令碼攻略 一

變數數 算 重定向陣列 別名終端資訊 日期相關 除錯指令碼 函式和引數 管道命令 字段分隔符和迭代器 迴圈算術比較 檔案系統相關測試 字串比較 日期內容 格式星期 a 例如 sat a 例如 saturday 月 b 例如nov b 例如 november 日 d 例如31 固定格式日期 d 例如 ...

Linux shell 指令碼學習攻略9

1 建立不可修改的檔案 chattr 能夠將檔案設定為不可修改。不過chattr能做的可不止這些。a 使用下列命令將乙個檔案設定為不可修改 b 這樣檔案file就變成為了不可修改狀態。來試試下面的命令 c 如果需要是檔案恢復可寫狀態,移除不可修改屬性即可 2 批量生成空白檔案 touch 命可以用來...