linux命令sh是linux中執行shell的命令,是shell的解釋器,shell腳本是linux中殼層與命令列介面,使用者可以在shell腳本輸入命令中執行各種各樣的任務。
#本教學操作環境:linux5.9.8系統、Dell G3電腦。
linux 指令 sh 是什麼意思?
linux sh指令簡述
.sh檔案就是文字文件,如果要執行,需要使用chmod a x xxx.sh來給予可執行權限。
shell程式必須以「#!/bin/sh」開始。 shell中#一般表示註解的意思,所以很多時候認為"#!"也是註釋,但其實不是。
"#!/bin/sh"是對shell的聲明,說明你所使用的是哪一種類型的shell及其路徑所在。
#!/bin/是指此腳本使用.bin/sh來執行。
#!是特殊的表示符,後面接著的是解釋此腳本的shell的路徑,如果沒有聲明,則腳本將在預設的shell中執行,預設shell是由使用者所在的系統定義要執行shell腳本,如果腳本被編寫為在Kornshell ksh中運行,而預設運行shell腳本的為C shell csh,則腳本在執行過程中很可能失敗。所以建議大家就把"#!/bin/sh"當成C 語言的main函數一樣,寫shell必須有,以使shell程式更嚴密。
在其他程式語言中必須使用變數。在shell程式設計中,所有變數都由字串組成,且不需要對變數進行宣告。要賦值給一個變數,可以這樣寫:
#!/bin/sh #对变量赋值: a=”hello world”# 现在打印变量a的内容: echo “A is:” echo $a
有時候變數名稱很容易與其他文字混淆,例如:
num=2 echo “this is the $numnd”
這並不會印出」this is the 2nd",而只印出"this is the ",因為shell會去搜尋變數numnd的值,但這個變數是沒有值的。因此,可以使用花括號來告訴shell我們要印的是num變數:
num=2 echo “this is the ${num}nd”
這樣才會列印」this is the 2nd"
在shell腳本中可以使用以下指令:
雖然在shell腳本中可以使用任意的unix指令,但還是有一些相對較常用的指令。這些命令通常是用來進行文件和文字操作的。
如:
echo "some text" #将文字内容打印在屏幕上 ls #文件列表 cp sourcefile destfile #文件拷贝 mv oldname newname #重命名文件或移动文件 rm file #删除文件 grep 'pattern' file #在文件内搜索字符串,如:grep 'searchstring' file.txt cat file.txt #输出文件内容到标准输出设备(屏幕)上 read var #显示用户输入,并将输入赋值给变量
|
將一個命令的輸出作為另外一個命令的輸入。 grep "hello" file.txt | wc -l
上述程式碼表示為:在 file.txt 中搜尋包含有 “hello” 的行併計算其行數。在這裡grep指令的輸出作為wc指令的輸入。
要注意的是,管道後面的指令是子指令,不會出現在接下來的指令中(有點像C 在{}
內和{}
外賦值的差異),如下列指令:
#!/bin/shecho 1 2 3 | { read a b c ; echo $a $b $c ; } # 打印结果为: 1 2 3echo $a $b $c # 打印结果为空
重定向
:將指令的結果輸出到文件,而不是標準輸出(螢幕)。
>寫入檔案並覆蓋舊檔案
>>追加到檔案的尾部,保留舊檔案內容。
反短橫線“`”:使用反短橫線可以將一個指令的輸出當作另一個指令的一個命令列參數。
find . -mtime -1 -type f -print
上述語句用來找出過去24小時(-mtime -2則表示過去48小時)內修改過的檔案。如果想要將所有查找到的檔案打一個包,則可以使用一下linux腳本:
#!/bin/sh # The ticks are backticks (`) not normal quotes (‘): tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
##if
if 表達式,如果條件為真則執行
then 後面的部分:
if ….; then …. elif ….; then …. else …. fi #注意是以fi结尾大多數情況下,可以使用測試指令來測試條件。例如可以
比較字串、判斷檔案時都存在以及是否可讀等等…
#while
while 迴圈的語法結構為:
# expression 1# while循环:当expresssion成立的时候,执行cmdwhile (expresssion)do cmddone# expression 2,可以直接使用truewhile true(或 :)do cmddone此指令配合可以配合管道使用,如:
# 寻找 ${path} 路径下唯一首字母为‘E’的子目录,并 cd 到该目录find ${path}/E* -type d | while read corresp_pathdo cd ${corresp_path}done
測試條件 通常使用
「[ ]」來表示測試條件。注意這裡的空格很重要,要確保方括號裡的空格。
[ -f "somefile" ] #判断文件是否存在 [ -d "testResults/" ] #判断目录testResults/是否存在 [ -x "/bin/ls" ] #判断/bin/ls文件是否存在并有可执行权限 [ -n "$var" ] #判断$var变量是否有值 [ "$a" = "$b" ] #判断$a和$b是否相等
快速運算元 熟悉C語言可能會喜歡表達式:
[ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”這裡
「&&」就是一個快速操作符,如果左邊的表達式為真則執行右邊的語句。當然也可以將上述表達式認為是邏輯運算中的與運算。
同樣或運算「||」在shell程式設計中也是可用的:
#!/bin/sh mailfolder=/var/spool/mail/james [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; } #感觉这里的‘’应该是|| echo “$mailfolder has mail from:” grep “^From ” $mailfolder
该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的”From” 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:
◆打印错误信息
◆退出程序
我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。
不用‘与’和‘或’操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。
推荐学习:《linux视频教程》
以上是linux 指令 sh 是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!