shell 字元詳解

2021-10-03 19:22:40 字數 2897 閱讀 1544

$# 是傳給指令碼的引數個數

$0 是指令碼本身的名字

$1 是傳遞給該shell指令碼的第乙個引數

$2 是傳遞給該shell指令碼的第二個引數

$@ 是傳給指令碼的所有引數的列表

$* 是以乙個單字串顯示所有向指令碼傳遞的引數,與位置變數不同,引數可超過9個

$$ 是指令碼執行的當前程序id號

$? 是顯示最後命令的退出狀態,0表示沒有錯誤,其他表示有錯誤

在linux shell中執行命令後加上die命令,執行過程中如果出錯會報出相應的原因與行號。如cat /usr/home/test.log || die $?,如果檔案不存在,則會報出相應的錯誤。

[root@dockermake ~]# cat test1.sh

#!/bin/bash

warn (

)die (

)cat

/usr/home/test.log |

| die $?

[root@dockermake ~]

# bash test1.sh

cat: /usr/home/test.log: no such file or directory

file=/dir1/dir2/dir3/my.file.txt
可以用$分別替換得到不同的值:

複製****如下:

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

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

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

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

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

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

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

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

記憶的方法為:

複製****如下:

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

複製****如下:

$:將第乙個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。 (非空值時不作處理)

$ 可計算出變數值的長度:

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

$ cat test2.sh

#!/bin/bash

file=/dir1/dir2/dir3/my.file.txt

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

echo $

[root@dockermake ~]

# bash test2.sh

dir1/dir2/dir3/my.file.txt

my.file.txt

file.txt

txt/dir1/dir2/dir3

/dir1/dir2/dir3/my.file

/dir1/dir2/dir3/my

/path1/dir2/dir3/my.file.txt

/path1/path2/path3/my.file.txt

/dir1/dir2/dir3/my.file.txt

/dir1/dir2/dir3/my.file.txt

my.file.txt

my.file.txt

/dir1/dir2/dir3/my.file.txt

/dir1/dir2/dir3/my.file.txt

/dir1/dir2/dir3/my.file.txt

/dir1/dir2/dir3/my.file.txt

27

shell字串操作詳解

1 shell變數宣告的判斷 表示式含義 變數var的值,與 var相同 如果var沒有被宣告,那麼就以 default作為其值 如果var沒有被宣告,或者其值為空,那麼就以 default作為其值 如果var沒有被宣告,那麼就以 default作為其值 如果var沒有被宣告,或者其值為空,那麼就以...

Shell指令碼 4 Shell字串詳解

字串 string 就是一系列字元的組合。字串是 shell 程式設計中最常用的資料型別之一 除了數字和字串,也沒有其他型別了 字串和變數一樣也有三種方式 str1 hello str2 shell str3 scirpt 這個三種形式的區別 1 由單引號 包圍的字串 任何字元都會原樣輸出,在其中使...

shell 陣列詳解

陣列是shell中常用的乙個東東。現在對shell中的陣列做乙個小結,方便以後使用。初始化陣列有兩種方式,直接上 array 0 1 2 arr 0 0 arr 1 1 arr 2 2這兩種方式都能初始化陣列,達到的效果是一致的。需要注意的一點是,用第二種方式初始化的時候,不需要先宣告arr,否則s...