linux如何執行.sh檔案
linux下執行.sh檔案的方法
1、 .sh檔案就是文字文件,如果要執行,則需要使用chmod a x xxx.sh來給予可執行權限。
是bash腳本麼
可以用touch test.sh #建立test.sh檔案
vi test.sh #編輯test.sh文件
加入內容
#! /bin/bash
mkdir test
# 保存退出。
chmod a x test.sh #給test.sh執行權限
如test,sh檔案在/home/work檔案下
執行
# 方法一本身目錄下執行
進入cd /home/workwen檔下
執行./test.sh
## 指令會在目前目錄下建立一個“test”目錄。方法二絕對路勁運作
執行/home/work/test.sh方法三本身目錄下運作
sh test.sh 最後建議:使用 C程式碼 1.man sh # man sh 來看看sh 的介紹~推薦:《##linux.sh語法
介紹:
1 開頭
程式必須以下面的行開始(必須放在檔案的第一行):
## !/bin/sh
符號#!用來告訴系統它後面的參數是用來執行該檔案的程式。在這個例子中我們使用/bin/sh來執行程式。
當編寫腳本完成時,如果要執行該腳本,則必須使其可執行。
要讓編寫腳本可執行:
編譯chmod x filename 這樣才能使用./filename 來執行
2 註解
在進行shell程式設計時,以#開頭的句子表示註釋,直到這一行的結束。我們真誠地建議您在程式中使用註釋。
如果您使用了註釋,那麼即使相當長的時間內沒有使用該腳本,您也能在很短的時間內明白該腳本的作用及工作原理。
3 變數
在其他程式語言中您必須使用變數。在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
4 環境變數
由export關鍵字處理過的變數叫做環境變數。我們不會對環境變數進行討論,因為通常情況下僅在登入腳本中使用環境變數。
5 Shell指令與流程控制
在shell腳本中可以使用三類指令:
1)Unix 指令:
雖然在shell腳本中可以使用任意的unix指令,但還是由一些相對較常用的指令。這些命令通常是用來進行文件和文字操作的。
常用指令語法及功能
echo “some text”: 將文字內容印在螢幕上
ls: 檔案清單
wc –l file wc -w file wc -c file: 計算檔案行數;計算檔案中的單字數;計算檔案中的字元數
cp sourcefile destfile: 檔案拷貝
mv oldname newname : 重命名檔案或移動檔案
rm file: 刪除檔案
grep 'pattern' file: 在檔案內搜尋字串例如:grep 'searchstring' file.txt
cut -b colnum file: 指定要顯示的檔案內容範圍,並將它們輸出到標準輸出裝置例如:輸出每行第5個到第9個字元cut -b5-9 file.txt千萬不要和cat指令混淆,
這是兩個完全不同的指令
cat file.txt: 輸出檔案內容到標準輸出裝置(螢幕)上
### file somefile: 取得檔案類型## #### read var: 提示使用者輸入,並將輸入賦值給變數###### sort file.txt: 對file.txt檔案中的行進行排序###### uniq: 刪除文字檔案中出現的重複行,例如: sort file.txt | uniq###### expr: 進行數學運算Example: add 2 and 3 為 expr 2 “ ” 3###### find: 搜尋檔案例如:根據檔案名搜尋find . -name filename -print########tee: 將資料輸出到標準輸出裝置(螢幕) 和檔案例如:somecommand | tee outfile
basename file: 傳回不包含路徑的檔案名稱例如: basename /bin/tux將回傳tux
dirname file: 返回檔案所在路徑例如:dirname /bin/tux將返回/bin
head file: 列印文字檔案開頭幾行
tail file : 列印文字檔案結尾幾行
sed: Sed是一個基本的尋找替換程式。可以從標準輸入(例如命令管道)讀入文本,並將
結果輸出到標準輸出(螢幕)。此指令採用正規表示式(見參考)進行搜尋。不要和shell中的通配符混淆。例如:將linuxfocus替換為 LinuxFocus :cat text.file | sed ’s/linuxfocus/LinuxFocus/’ >newtext.file
awk: awk 用來從文字檔案中提取欄位。缺省地,字段分割符是空格,可以使用-F指定其他分割符。
cat file.txt | awk -F, ‘{print $1 “,” $3}’這裡我們使用,作為字段分割符,同時打印第一個和第三個字段。如果該文件內容如下: Adam Bor, 34, IndiaKerryMiller, 22, USA指令輸出結果為:Adam Bor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向和backtick
這些不是系統命令,但是他們真的很重要。
管道 (|) 將一個指令的輸出作為另一個指令的輸入。
grep “hello” file.txt | wc -l
在file.txt中搜尋包含有”hello」的行併計算其行數。
在這裡grep指令的輸出作為wc指令的輸入。當然您可以使用多個命令。
重定向:將指令的結果輸出到文件,而不是標準輸出(螢幕)。
> 寫入檔案並覆寫舊檔案
>> 追加到檔案的尾部,保留舊檔案內容。
反短斜線
使用反短斜線可以將一個指令的輸出作為另一個指令的一個命令列參數。
指令:
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`
3) 流程控制
# 1.if
「if」 表達式如果條件為真則執行then後面的部分:
if ….; then
….
## elif ….; then …. else …. fi 大多數情況下,可以使用測試指令來對條件進行測試。例如可以比較字串、判斷檔案是否存在及是否可讀等等… 通常用」 [ ] 「來表示條件測試。注意這裡的空格很重要。要確保方括號的空格。 [ -f "somefile" ] :判斷是否是一個檔案 [ -x "/bin/ls" ] :判斷/bin/ls是否存在並且有可執行權限 [ -n "$var" ] :判斷$var變數是否有值 [ "$a" = "$b" ] :判斷$a和$b是否相等 執行man test可以查看所有測試表達式可以比較和判斷的類型。 直接執行以下腳本: #!/bin/sh# if [ "$SHELL" = "/bin/bash" ]; then # echo “your login shell is the bash (bourne again shell)”# else echo “your login shell is not bash but $SHELL” fi# fi
# fi# 變數$SHELL包含了登入shell的名稱,我們和/bin/bash進行了比較。 快速運算子 熟悉C語言的朋友可能會很喜歡下面的表達式: [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors」 這裡&& 就是一個快速運算符,如果左邊的表達式為真則執行右邊的語句。 您也可以認為是邏輯運算中的與運算。上例中表示如果/etc/shadow檔案存在則列印」 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如何執行文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!