當前位置:星座運勢大全官網 - 八字算命 - Linux借用外部命令expr實現計算器功能,使用管道和進程。

Linux借用外部命令expr實現計算器功能,使用管道和進程。

測試說明(詢問說明人)

功能:檢查文件類型和比較值。

測試的各種參數和用法。

測試表達式1–a表達式2

當表達式1和表達式2都為真時,值為真。

測試表達式1–o表達式2

當表達式1或表達式2為真時,該值為真。

測試–n字符串

或者

測試字符串

當字符串STRING的長度不為零時為True。

測試–z字符串

當字符串長度為零時,該值為true。

測試字符串1 =字符串2

當STRING1和STRING2的時間值相同時,為真。

測試字符串1!= STRING2

當STRING1和STRING2的不同值為真時。

測試整數1–eq整數2

當整數1等於整數2時,該值為真。

測試整數1–通用電氣整數2

當INTEGER1大於或等於INTEGER2時為True。

測試整數1–gt整數2

當整數1大於整數2時為True。

測試整數1–整數2

當INTEGER1小於或等於INTEGER2時為True。

測試整數1–lt整數2

當整數1小於整數2時為True。

測試整數1–ne整數2

當INTEGER1不等於INTEGER2時為True。

測試文件1–ef文件2

當文件1和文件2具有相同的設備號和索引節點號時為True(有關詳細信息,請參閱linux文件學習筆記)。

測試文件1–nt文件2

當文件1的修改時間比文件2的新值為真時。

測試文件1–ot文件2

當文件1的修改時間比文件2的舊值為真時。

測試-b文件

文件存在,並且內容屬於block類型。

測試–c文件

文件存在,並且是字符類型。

測試-d文件

文件存在並且是壹個目錄。

測試–e文件

文件存在嗎?

測試–f文件

文件存在,並且是正則表達式類型的文檔。

測試–g文件

文件存在,並且是set-group-ID,即SGID(有關詳細信息,請參閱後面的學習筆記)。

測試–G文件

文件存在,並由有效的組id擁有(有關詳細信息,請參閱後面的學習筆記)。

測試–h文件

文件存在,並且是壹個符號鏈接(詳見後面的學習筆記)。

測試-k文件

文件存在,並且設置了粘滯位(有關詳細信息,請參閱後面的學習筆記)。

測試–L文件

文件存在並且是壹個符號鏈接。

測試-O文件

文件存在,並且由有效的用戶id擁有。

測試–p文件

文件存在,並且是壹個命名管道(參見後面的學習筆記)。

測試-r文件

文件存在,並已被授予可讀權限。

測試文件

文件存在,並且大小大於0。

測試文件

文件存在並且是套接字。

測試–測試故障診斷

在終端中打開文件的描述符FD。

測試-u文件

文件存在,SUID已設置。

測試–w文件

文件存在,並且已被授予寫權限。

測試–x文件

文件存在,並已被授予可執行權限。

-

expr

Expr是linux的壹個手動命令行計數器,可以幫助我們完成壹些基本的表達式值運算。它也是壹個字符串處理工具。

(1)整數運算

$expr ARG1 | ARG2

$ expr arg 1 & amp;ARG2

$ expr arg 1 & lt;ARG2

$ expr arg 1 & lt;= ARG2

$expr ARG1 = ARG2

$expr ARG1!= ARG2

$ expr arg 1 & gt;= ARG2

$ expr arg 1 & gt;ARG2

$expr ARG1 + ARG2

$ expr arg 1–arg 2

$expr ARG1 * ARG2

使用乘法時,需要使用反斜杠進行轉義。

$expr ARG1 % ARG2

(2)字符串操作

$ expr length " XXX "//計算字符串長度。

$ expr substr "這是壹個" pos length//從pos位截斷長度的子串。

$ expr index " tesr " e//獲取e在主字符串中第壹次出現的位置。

(3)增量計數

例子

循環=3

loop = ' expr $ loop+1 '

echo $loop

結果是4。在第二行代碼中,使用了後引號,shell會將後引號中的內容作為系統命令。這樣,就好像我們在命令行輸入expr $loop+1,這個命令的返回結果就被賦給了這個循環。

(4)模式匹配(根據正則表達式模式匹配字符串)

通過指定冒號選項來計算字符串中的字符數。。*表示任何字符重復0次或更多次。

& gtVALUE=account.doc

& gt表達式$值:'。*'

您可以在expr中使用字符串匹配操作,其中您使用模式來提取。doc文件。

$ expr $ VALUE:“\(。*\).醫生

帳目

(5)其他

+令牌

將TOKEN解釋為字符串,無論它是關鍵字還是運算符。

擴展知識:

引號的作用

1雙引號("")

1)使用" "來引用除$(美元符號)、`(反引號)和\(反斜杠)以外的任何字符或字符串。雙引號並不妨礙shell對這三個字符做特殊處理(表示變量名、命令替換、反斜杠轉義)。

eg:name = gezn;Echo "用戶名:$ name "//將打印用戶名:gezn。

Echo "日期是:` date+date-% d-% m-% y ` "//日期是:03-05-2009將被打印。

將打印echo–e " $ user \ t $ uid "//gezn 500。

2)如果要搜索包含空格的新字符串,經常使用雙引號。

2個單引號(“”)

1)如果字符串用單引號括起來,那麽dayi9nhao中字符串中任何特殊字符的特殊含義都會被屏蔽掉。

2)例如:echo–e ' $ USER \ t $ UID '/$ USER $ UID將被打印出來(由於選項"-e ",不會被屏蔽)。

echo ' USER \ t $ UID '//將打印$USER\t$UID。

3個反引號(``)

1) shell shell將後引號中的內容作為系統命令並執行其內容。使用此方法將輸出替換為變量。

2)例如:a=`date+date-%d-%m-%Y` //將打印日期為:03-05-2009。

4.反斜杠(\)

1)如果下壹個字符有特殊含義,反斜杠防止shell誤解其含義,即屏蔽其特殊含義。

2)從屬字符包含特殊含義:* + $ ` " |?

3)當打印字符串時要添加八進制字符(ASCII對應字符)時,必須在前面加壹個反斜杠,否則shell將作為普通數字使用。

例:bj =北京;echo " variable \ $ bj = $ bj "//將打印變量$bj = beijing。

-

外殼特殊變量

在Shell中,預定義了幾個具有特殊含義的Shell變量,它們的值只能由Shell根據實際情況進行賦值,不能由用戶進行重置。殼的特殊變量包括它的位置和壹些系統變量。

(1)常見位置變量:

命令行上實際參數的數量,但不包括Shell腳本名稱。

$?執行最後壹個命令後的返回值(也稱為“退出代碼”)。這是壹個十進制數。大部分Shell命令執行成功時,返回值為0;如果執行失敗,將返回壹個非零值。

當前進程的進程號。

$!最後壹條後臺命令對應的進程號,是由1~5位數字組成的數字串。

$-由當前Shell設置的執行標誌名組成的字符串。例如:

命令行set -xv為Shell設置標誌-x和-v(用於跟蹤輸出)。

$ *表示命令行上實際給出的所有參數字符串,不限於9個參數。

$ @它的基本功能和$ *壹樣,只是用在引號中,每個參數都用引號返回。

$0腳本名稱

$1 ...$9第n個參數

下面的aaa bbb是變量名。

${aaa:-bbb}如果$aaa為空或未定義,則值為$bbb。否則,該值為$aaa。

${aaa:+bbb}如果$aaa不為空,則值為$bbb,否則為空。

${aaa:=bbb}如果$aaa不為空,則取$aaa的值,否則取$bbb的值並賦值(aaa=bbb)。

${aaa:3}如果aaa=abcdefg,${aaa:3}的值為:defg,相當於substr,計數從0開始。

${aaa:3:2}同上;${ AAA:3:2 }的值是:de,相當於substr。

${#aaa}字符串$aaa的長度。

(2)常見系統變量:

$HOME用戶的主目錄

$USER用戶名

$ TERM用戶所屬的$組的名稱

$PATH默認搜索路徑

$HOSTNAME的主機名

$ TERM tz時區

存儲$MAIL的$ TERM的路徑名

練習手:

#!/bin/bash

回顯$0

回聲$*

echo $@

echo $#

echo $$

回聲$_

在終端窗口中執行:

。/test . sh-a-b–c/home

。/test.sh

-a -b -c /home

-a -b -c /home

3250

/首頁

區分$ *和$ @編寫以下test.sh腳本:

#!/bin/bash

功能測試標記

{

回顯" $# args "

}

testargs "$* "

測試標記“$@”

未設置測試標記

在終端窗口中執行:

。/test.sh -a -b /home

1 args //顯然只有壹個,傳入的是字符串$ *,而不是被解釋的參數。

3 args //$@必須匹配引號,這樣結果才是正確的。

#!/bin/bash

功能測試標記

{

回顯" $# args "

}

testargs $*

testargs $@

未設置測試標記

同樣,還有:

。/test.sh -a -b /home

3個參數

3個參數

作者:阿迦。J

資料來源:blogs.com/aga-j.