Bash Shell學習筆記四

2021-05-21 18:23:20 字數 4158 閱讀 9848

set $(commond)          將位置引數設定為後面的命令輸出

shell命令中 在-- 後面的語句將會不再解釋後面的 -

cal 萬年曆

bc 計算器

$histsize 歷史大小

$random 隨機數

basename  pathname    去除路徑字首的最後部分

空變數+1=1

沒有賦值或申明的變數+1=1

字元變數--->通過替換成為數字-->數字變數  可以接受 +1操作

數字變數--->通過替換成為字元--->字元變數 不再接受 +1操作

使用-e 選項的echo 命令來列印轉義符

如果使用$'/x'結構,那-e 選項就不必要了

版本2 以後bash 允許使用$'/nnn'結構,'/nnn/是8 進製

"[["是乙個關鍵字,並不是乙個命令

bash 把[[ $a -lt $b ]]看作乙個單獨的元素,並且返回乙個退出碼.

陣列申明方式:空格分隔的,()包含的字元

var=(ab sc linfe)

陣列引用方式

first=$var[1] 引用第二個元素

first=$var[0] 或者 first=$var 引用第乙個元素

獲取整個陣列

whole=$var[@]

echo $whole

獲取陣列的最大長度

long=$

echo $long

陣列第n個元素字串的長度

long=$ 陣列第3個元素的長度

獲取一部分陣列內容

part=$

echo $part                    獲取從第2個元素開始 3個元素的內容

part=$     獲取從開始到第3個元素的內容

echo $part

part=$      獲取從第3個元素開始的內容

echo $part

陣列的應用:模擬棧

push:

array=(」$」 $new_element)

pop:

array=($-1))})

shift:

array=($)

unshift

array=($new_element 「$」)

function del_array ; i++ ))

doif [ "$1" = "$" ] ;then

break

fidone

del_array_index $i

}function del_array_index $)

}$ 數制轉換  echo $((2#101011)) 返回101011的十進位制結果

:內建命令,返回值為0,命令的結果返回為0表示true,什麼也不做

$ 判斷hostname是否被set

() 命令組,在()中的命令列表,將作為乙個子shell來執行

$? 前乙個命令的退出狀態

$$ 程序的pid

$*,$@ 位置引數

$引數替換

$ 正規表示式中的行結束符

? 正規表示式中的單個字元

? (())結構中,用來做3元操作符

* 正規表示式中的萬能匹配

** 數學冪運算

{}  大括號擴充套件 cat > file   cp file

^ 匹配輸入字串的開始位置。

$  匹配輸入字串的結束位置。

~+ 等同於 $pwd 當前目錄

~-  等同於 $oldpwd 上乙個目錄

args=$#;lastarg=$ 引數傳遞中第乙個為$1,$#表示總個數,最後乙個為 $lastarg

[ -n $var]  var是否被定義,定義則為真 與 [ -z $var ]測試相反

命令 sed -i 's/pattern/replacement-string/ file

命令if [[ "a" != "a"$i ]]

then

echo "not space"

else

echo "space"

fi$:拿掉第乙個 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt

$:拿掉最後乙個 / 及其左邊的字串:my.file.txt

$:拿掉第乙個 .  及其左邊的字串:file.txt

$:拿掉最後乙個 .  及其左邊的字串:txt

$:拿掉最後乙個 / 及其右邊的字串:/dir1/dir2/dir3

$:拿掉第乙個 / 及其右邊的字串:(空值)

$:拿掉最後乙個 .  及其右邊的字串:/dir1/dir2/dir3/my.file

$:拿掉第乙個 .  及其右邊的字串:/dir1/dir2/dir3/my

記憶的方法為:

$:提取最左邊的 5 個位元組:/dir1

$:提取第 5 個字元右邊的連續 5 個位元組:/dir2

我們也可以對變數值裡的字串作替換:

$:將第乙個 dir 替換為 path:/path1/dir2/dir3/my.file.txt

$:將全部 dir 替換為path:/path1/path2/path3/my.file.txt

利用 $ 還可針對不同的變數狀態賦值(沒設定、空值、非空值):

$ :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理)

$ :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理)

$ :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作處理)

$ :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理)

$ :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將$file 賦值為 my.file.txt 。 (空值及非空值時不作處理)

$ :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理)

$ :若 $file 沒設定,則將 my.file.txt 輸出至 stderr。 (空值及非空值時不作處理)

$ :若 $file 沒設定或為空值,則將my.file.txt 輸出至 stderr。 (非空值時不作處理)

tips:

以上的理解在於, 你一定要分清楚 unset 與 null 及 non-null 這3種賦值狀態.

一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連null 也受影響.

還有哦,$ 可計算出變數值的長度:

$ 可得到 27 ,因為/dir1/dir2/dir3/my.file.txt 剛好是 27 個位元組...

這牽扯到 script 或 function 的 positional parameter 。

$0 代表 script 本身(function 的 $0 也是 script)

其後的字串以 ifs 分隔,分別從 $1, $2 ...  起...

$@ 或 $* 則是 $1 到最後乙個 positional parameter 。

shift 是"引數向左移動",但不好理解...  

我將之說成:shift 就是"砍掉" $@/$* 最左邊的 parameter 。

shift n 則是砍掉 n 個...

比方說,要取得第 10 個 parameter ,可以:

echo $

也可以:

shift 9; echo $1

linux 學習筆記四 bash shell

type 查詢命令是否為bash 內建命名 變數的設定規則 myname ceshi 變數與變數內容用 連線 變數名稱可以是數字英文本母,但是不能以數字開頭。內容如果有空白可以用單引號 或者雙引號 但是單引號只能作為一般字元也就是文字顯示,雙引號可以引用變數。變數的增加 名稱 增加內容,或者 內容 ...

Bash Shell學習筆記一

1.在linux中執行指令碼檔案時 以 執行的 或者普通方式 輸入檔名 執行時是啟動子shell執行的,所以,一切環境變數設定在推出後失效 因此在指令碼中設定 path將失效,如果一定要以指令碼方式來設定,需要 空格 檔名或者 source 指令碼檔案的形式執行.2.linux中的 和 雙引號和單引...

Bash shell 學習筆記 PS命令

ps命令能夠給出當前系統中程序的快照。它能捕獲系統在某一事件的程序狀態。如果你想不斷更新檢視的這個狀態,可以使用top命令。通過cpu和記憶體使用來過濾程序 根據 cpu 使用來公升序排序 ps aux sort pcpu less 根據 記憶體 使用來公升序排序 ps aux sort pmem ...