bash腳本執行
linux下運行bash腳本的方法如下:
首先在桌面右鍵點擊,選擇在終端中打開,打開命令行;
在命令行中輸入 cd 腳本路徑,進入腳本所在目錄;
使用chmod +x 腳本名命令給文件添加可執行許可權;
使用sh 腳本名或者 ./腳本名的方法來運行bash腳本。
② Bash 腳本進階,經典用法及其案例
前言:在linux中,Bash腳本是很基礎的知識,大家可能一聽腳本感覺很高大上,像我當初剛開始學一樣,感覺會寫腳本的都是大神。雖然復雜的腳本是很燒腦,但是,當我們熟練的掌握了其中的用法與技巧,再多加練習,總有一天也會成為得心應手的腳本大神。腳本在生產中的作用,想必我我不說,大家也都知道,腳本寫的6,可以省下很多復雜的操作,減輕自己的工作壓力。好了,廢話不多說,接下來,就是Bash腳本的用法展示。
(1)用法格式
if 判斷條件 1 ; then
條件為真的分支代碼
elif 判斷條件 2 ; then
條件為真的分支代碼
elif 判斷條件 3 ; then
條件為真的分支代碼
else
以上條件都為假的分支代碼
fi
逐條件進行判斷,第一次遇為「真」條件時,執行其分支,而後結束整個if。
(2)經典案例:
① 判斷年紀
分析:請輸入年紀,先判斷輸入的是否含有除數字以外的字元,有,就報錯;沒有,繼續判斷是否小於150,是否大於18。
② 判斷分數
分析:請輸入成績,先判斷輸入的是否含有除數字以外的字元,有,就報錯;沒有,繼續判斷是否大於100,是否大於85,是否大於60。
(1)用法格式
case $name in;
PART1)
cmd
;;
PART2)
cmd
;;
*)
cmd
;;
esac
注意:case 支持glob 風格的通配符:
*: 任意長度任意字元
?: 任意單個字元
[] :指定范圍內的任意單個字元
a|b: a 或b
(2)案例:
判斷yes or no
分析:請輸入yes or no,回答Y/y、yes各種大小寫組合為yes;回答N/n、No各種大小寫組合為no。
(1)用法格式
① for name in 列表 ;do
循環體
done
② for (( exp1; exp2; exp3 )) ;do
cmd
done
exp1隻執行一次,相當於在for里嵌了while
③ 執行機制:依次將列表中的元素賦值給「變數名」; 每次賦值後即執行一次循環體; 直到列表中的元素耗盡,循環結束
列表的表示方法,可以glob 通配符,如{1..10} 、*.sh ;也可以變數引用,如: `seq 1 $name`
(2)案例
① 求出(1+2+...+n)的總和
分析:sum初始值為0,請輸入一個數,先判斷輸入的是否含有除數字以外的字元,有,就報錯;沒有判斷是否為0,不為0進入for循環,i的范圍為1~輸入的數,每次的循環為sum=sum+i,循環結束,最後輸出sum的值。
② 求出(1+2+...+100)的總和
分析:i=1,num=0;當i<=100,進入循環,若i 2取余=1,則sum=sum+i,i=i+1。
(1)用法格式
while 循環控制條件 ;do
循環
done
循環控制條件;進入循環之前,先做一次判斷;每一次循環之後會再次做判斷;條件為「true」 ,則執行一次循環;直到條件測試狀態為「false」 終止循環
(2)特殊用法(遍歷文件的每一行):while read line; do控制變數初始化循環體done < /PATH/FROM/SOMEFILE或 cat /PATH/FROM/SOMEFILE | while read line; do循環體done依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變數line
(3)案例:
① 100以內所有正奇數之和
分析:sum初始值為0,i的初始值為1;請輸入一個數,先判斷輸入的是否含有除數字以外的字元,有,就報錯;沒有當i<100時,進入循環,判斷 i 2取余 是否不為0,不為0時為奇數,sum=sum+i,i+1,為0,i+1;循環結束,最後輸出sum的值。
(1)用法
unitl 循環條件 ;do
循環
done
進入條件:循環條件為true ;退出條件:循環條件為false;剛好 和while相反 ,所以不常用,用while就行。
(2)案例
監控xiaoming用戶,登錄就殺死
分析:每隔0.5秒掃描,直到發現xiaoming用戶登錄,殺死這個進程,退出腳本,用於監控用戶登錄。
(1)用法
select variable in list
do
循環體命令
done
① select 循環主要用於創建菜單,按數字順序排列的示菜單項將顯示在標准錯誤上,並顯示PS3 提示符,等待用戶輸入
② 用戶輸入菜單列表中的某個數字,執行相應的命令
③ 用戶輸入被保存在內置變數 REPLY 中
④ select 是個無限循環,因此要記住用 break 命令退出循環,或用 exit 按 命令終止腳本。也可以按 ctrl+c退出循環
⑤ select 和 經常和 case 聯合使用
⑥ 與for循環類似,可以省略 in list, 此時使用位置參量
(2)案例:
生成菜單,並顯示選中的價錢
分析:PS3是select的提示符,自動生成菜單,選擇5break退出循環。
(1)語法
continue [N]:提前結束 第N層的本輪 循環,而直接進入下一輪判斷;最內層為第1層
break [N]:提前結束 第N層 循環,最內側為第1層
例:while CONDTITON1; doCMD1if CONDITION2; thencontinue / breakfiCMD2done (2)案例:
① 求(1+3+...+49+53+...+100)的和
分析:做1+2+...+100的循環,當i=51時,跳過這次循環,但是繼續整個循環,結果為:sum=2449
② 求(1+3+...+49)的和
分析:做1+2+...+100的循環,當i=51時,跳出整個循環,結果為:sum=625
(1)作用
用於將參數列表list左移指定次數,最左端的那個參數就從列表中刪除,其後邊的參數繼續進入循環
(2)案例:
① 創建指定的多個用戶
分析:如果沒有輸入參數(參數的總數為0),提示錯誤並退出;反之,進入循環;若第一個參數不為空字元,則創建以第一個參數為名的用戶,並移除第一個參數,將緊跟的參數左移作為第一個參數,直到沒有第一個參數,退出。
② 列印直角三角形的字元
true 永遠返回成功結果
: null command ,什麼也不幹,返回成功結果
false 永遠返回錯誤結果
創建無限循環
while true ;do
循環體
done
(1)用法
for name in 列表 ;do
{
循環體
}&
done
wait
(2)實例:
搜尋自己指定ip(子網掩碼為24的)的網段中,UP的ip地址
分析:請輸入一個IP地址例192.168.37.234,如果格式不是0.0.0.0 則報錯退出;正確則進入循環,IP變數的值為192.168.37. i的范圍為1-254,並行ping 192.168.37.1-154,ping通就輸出此IP為UP。直到循環結束。
trap ' 觸發指令' 信號,自定義進程收到系統發出的指定信號後,將執行觸發指令,而不會執行原操作
trap '' 信號,忽略信號的操作
trap '-' 信號,恢復原信號的操作
trap -p ,列出自定義信號操作
信號可以3種表達方法:信號的數字2、全名SIGINT、縮寫INT
1) SIGHUP: 無須關閉進程而讓其重讀配置文件
2) SIGINT: 中止正在運行的進程;相當於Ctrl+c
3) SIGQUIT: 相當於ctrl+
9) SIGKILL: 強制殺死正在運行的進程
15) SIGTERM :終止正在運行的進程(默認為15)
18) SIGCONT :繼續運行
19) SIGSTOP :後台休眠
9 信號,強制殺死,捕獲不住
① 列印0-9,ctrl+c不能終止
分析:i=0,當i<10,每休眠1秒,i+1,捕獲2信號,並執行echo press ctrl+c
② 列印0-3,ctrl+c不能終止,3之後恢復,能終止
分析:i=0,當i3時,解除捕獲2信號。
1、生成隨機字元 cat /dev/urandom
生成8個隨機大小寫字母或數字 cat /dev/urandom |tr -dc [:alnum:] |head -c 8
2、生成隨機數 echo $RANDOM
確定范圍 echo $[RANDOM%7] 隨機7個數(0-6)
echo $[$[RANDOM%7]+31] 隨機7個數(31-37)
3、echo列印顏色字
echo -e "33[31malong33[0m" 顯示紅色along
echo -e "33[1;31malong33[0m" 高亮顯示紅色along
echo -e "33[41malong33[0m" 顯示背景色為紅色的along
echo -e "33[31;5malong33[0m" 顯示閃爍的紅色along
color=$[$[RANDOM%7]+31]
echo -ne "33[1;${color};5m*33[0m" 顯示閃爍的隨機色along
③ linux shell腳本執行命令詳解
在Linux下,如果你需要執行shell腳本,那麼應該使用那個命令呢?下面由我為大家整理了linux shell腳本執行命令的相關知識,希望對大家有幫助!
linux shell腳本執行
linux shell腳本執行方法一: 切換到shell腳本所在的目錄(此時,稱為工作目錄)執行shell腳本:
cd /data/shell
./hello.sh
./的意思是說在當前的工作目錄下執行hello.sh。如果不加上./,bash可能會響應找到不到hello.sh的錯誤信息。因為目前的工作目錄(/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變數PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。現在的/data/shell就不在環境變數PASH中的,所以必須加上./才可執行。
linux shell腳本執行方法二: 以絕對路徑的方式去執行bash shell腳本:
/data/shell/hello.sh
linux shell腳本執行方法三: 直接使用bash 或sh 來執行bash shell腳本:
cd /data/shell
bash hello.sh
或
cd /data/shell
sh hello.sh
注意,若是以方法三的方式來執行,那麼,可以不必事先設定shell的執行許可權,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家調用執行,所以不要執行許可權。那麼不用指定bash路徑自然也好理解了啊。
linux shell腳本執行方法四: 在當前的shell環境中執行bash shell腳本:
cd /data/shell
. hello.sh
或
cd /data/shell
source hello.sh
前三種方法執行shell腳本時都是在當前shell(稱為父shell)開啟一個子shell環境,此shell腳本就在這個子shell環境中執行。shell腳本執行完後子shell環境隨即關閉,然後又回到父shell中。而方法四則是在當前shell中執行的。
④ 10 分鍾學會Linux常用 bash命令
顯示所有的環境變數,如果你想獲取某個變數的詳細信息,使用 echo $VARIABLE_NAME .
Example:
whereis使用系統自動構建的資料庫來搜索可執行文件,源文件和手冊頁面。
Example:
它在環境變數PATH指定的目錄中搜索可執行文件。此命令將列印可執行文件的完整路徑。
Example:
清除窗口上的內容。
列出您的文件。 ls 有很多選項: -l 列出「長格式」的文件,其中包含文件的確切大小,擁有該文件的人員,有權查看該文件,以及何時進行上次修改。 -a 列出所有文件,包括隱藏文件。有關此命令的更多信息,請檢查此鏈接。
Example:
創建或更新您的文件。
Example:
它可以在UNIX或Linux下用於以下目的。
顯示文件的第一部分(用空格移動並鍵入q以退出)。
輸出文件的前10行。
輸出最後10行文件。用於-f在文件增長時輸出附加數據。
將文件從一個位置移動到另一個位置。
filename1 文件的源路徑, filename2 是目標路徑。
將文件從一個位置復制到另一個位置。
filename1 文件的源路徑, filename2 是目標路徑。
刪除文件。在目錄上使用此命令會給您顯示一個錯誤: rm: directory: is a directory 。 為了刪除目錄,你必須傳遞 -rf 去遞歸刪除目錄中的所有內容。
比較文件,並列出他們的差異。
讓您更改文件的讀取,寫入和執行許可權。
壓縮文件。
解壓縮gzip壓縮的文件。
讓你查看gzip壓縮文件,而不需要gunzip它。
列印文件。
查看列印機隊列。
Example:
從列印隊列移除某些內容。
awk是處理文本文件最有用的命令。它一行一行地在整個文件上運行。默認情況下,它使用空格分隔欄位。awk命令最常用的語法是
讓我們採取以下文件 /etc/passwd 。以下是此文件包含的示例數據:
所以現在讓我們從這個文件只獲取用戶名。 -F 指定在我們要基於哪個分隔欄位。在我們的例子中 : 。 { print $1 } 意味著列印出第一個匹配欄位。
運行上述命令後,您將獲得以下輸出。
有關如何使用 awk 的更多細節,請查看以下鏈接。
查找文件內的文本。您可以使用grep搜索與一個或多個正則表達式匹配的文本行,並僅輸出匹配的行。
Example:
您還可以通過使用 -i 選項強制grep忽略單詞大小寫。 -r 可用於搜索指定目錄下的所有文件,例如:
-w 只搜索單詞。有關 grep 詳細信息,請查看以下鏈接。
告訴你一個文件中有多少行,多少單詞和多少字元。
Example:
7459 是行數, 15915 是單詞數, 398400 是字元數.
用於過濾和轉換文本的流編輯器。
example.txt
用連字元替換所有空格
使用"d"替換所有的數字
排序文本文件的行
example.txt
sort example.txt
隨機化一個排序的example.txt
報告或省略重復的行
example.txt
只顯示example.txt的唯一行(首先你需要排序,否則看不到重疊)
顯示每行的唯一項,並告訴我找到了多少個實例
從每行文件中刪除部分。
example.txt
顯示第2,7和9欄的空格作為分隔符
顯示一行文字
顯示 "Hello World"
用字母之間的換行顯示 "Hello World"
簡單的最佳文本格式化程序
example: example.txt (1 line)
將example.txt的行輸出為20個字元的寬度
翻譯或刪除字元
example.txt
把所有小寫字母變成為大寫
把所有的空格變成換行符
顯示文件的行數
example.txt
帶行號顯示 example.txt
列印匹配模式的行 - 擴展表達式(別名為:'grep -E')
example.txt
在其中顯示「Lorem」或「dolor」的行
列印匹配模式到的行 - FIXED模式匹配(別名為:'grep -F')
example.txt
在example.txt中找到具體的字元串'(Lorem | doloar)'
生成一個新的目錄。
執行這個,從一個目錄轉移到另外一個目錄。
將你移動到主目錄。此命令接受可選的 dirname ,將你移動到該目錄。
告訴你你目前所在的目錄。
ssh (SSH client) 是一個用來在登錄到遠程機器並執行的命令的程序。
此命令還接受 -p 可用於連接到特定埠的選項。
返回當前登錄用戶名。
允許當前登錄的用戶更改其密碼。
顯示您的磁碟配額。
顯示當前日期和時間。
顯示月份的日歷。
顯示當前的正常運行時間。
顯示誰在線
Displays information about user.
顯示內核信息。
顯示指定命令的手冊。
顯示磁碟使用情況。
顯示文件名中文件和目錄的磁碟使用情況( -s只給出一個總數)。
列出您最後登錄的指定用戶。
列出您的進程。
使用您所提供的ID殺死(結束)進程。
用名稱殺死所有進程。
顯示當前活動的進程。
列出停止的或後台工作的Job; 恢復在後台停止的Job。
前台化最近的Job。
Brings the most recent job in the foreground.
Pings主機並輸出結果。
獲取域的whois信息。
獲取域的DNS信息。
下載文件。
在本地主機和遠程主機之間或兩台遠程主機之間傳輸文件。
從本地主機復制到遠程主機
從遠程主機復制到本地主機
此命令還接受 -P 選項可用於連接到特定的埠。
在bash中你將編寫第一行腳本文件,被叫做 shebang 。任何腳本中的這一行來確定腳本的執行能力,如獨立的可執行文件,而不是在終端中預先鍵入sh,bash,python,php等。
Example:
上面的一行創建一個變數str並給它賦值「hello world」。通過 $ 放在變數名的開頭來檢索變數的值。
Example:
像其他語言一樣,bash也有數組。數組是包含多個值的變數。數組的大小沒有最大限制。bash中的數組為零。第一個元素被索引為元素0.在bash中創建數組有幾種方法。以下給出了哪些。
Examples:
要在特定索引處顯示值,請使用以下語法:
如果沒有提供索引,則假定為數組元素0。要了解數組中有多少值,請使用以下語法:
Bash也支持三元條件。下面是一些例子。
檢查一些關於如何操作字元串的語法
Example:
當您運行上述示例時,該hello函數將輸出「world!」。上述兩個功能 hello 和 say 是相同的。主要區別是功能 say 。此功能列印其接收到的第一個參數。函數內的參數以與給腳本的參數相同的方式進行處理。
bash中的條件語句與其他編程語言相似。條件有許多形式,如最基本的形式是 if 表達式 then 語句,其中語句只有在表達式為真時執行。
有時,如果條件變得混亂,所以你可以使用相同的條件 case statements 。
Expression Examples:
bash 中有三種不同類型的循環。 for , while 和 until .
for 語法:
while 語法:
until 語法:
bash_profile 可以通過運行後面的命令打開。 nano ~/.bash_profile
nano ~/.bashrc
source ~/.bashrc
cd hotellogs
您可以通過傳遞不同的選項來輕松地調試bash腳本bash。例如-n,不會運行命令並僅檢查語法錯誤。-vecho命令在運行它們之前。-x命令行處理後的echo命令。
⑤ 怎麼在bash腳本中運行一個已經編譯好的可執行程序
有2種辦法:
1、直接執行絕對路徑:
/usr/local/apache2/bin/apachetcl
2、建立軟鏈接到系統PATH中:
ln -s /usr/local/apache2/bin/* /usr/local/bin/
然後,你就可以直接敲命令apachectl了。。。
⑥ linux下怎麼運行bash腳本
linux下運行bash腳本的方法如下:
1.
首先在桌面右鍵點擊,選擇在終端中打開,打開命令行;
2.
在命令行中輸入
cd
腳本路徑,進入腳本所在目錄;
3.
使用chmod
+x
腳本名命令給文件添加可執行許可權;
4.
使用sh
腳本名或者
./腳本名的方法來運行bash腳本。
⑦ 不過時的技術——Bash腳本
Bash是一種不需要編譯,直接運行在Unix/Linux系統之上的腳本程序。它可以只包含一些簡單的命令,順序執行;也可以包含變數、控制語句等復雜的語法結構。Unix/Linux系統一直就是計算機世界的基石,Bash也是系統管理員、程序員必須掌握的技術之一,很多工作都可以藉助Bash自動執行。甚至Unix/Linux系統本身的很多功能,也是由Bash實現的。隨意打開 /etc/init.d/ 目錄下的某個文件,會發現就是一個Bash腳本,在Linux中,存在這大量這樣的腳本。
上面的腳本看似復雜,但從結構上可以簡單劃分為四部分:
1. 第一行 #! /bin/sh 叫 shebang ,標明這是一個Shell腳本。
2. 後面以 # 打頭的是注釋,說明該腳本的作用及用法。
3. 中間一大段是命令及控制語句,這里是真正做事的地方。
4. 最後 exit 0 ,退出腳本。
一個Linux命令執行後,都會有一個返回值, 0 表示命令執行成功, 1 表示命令執行過程中出錯,根據錯誤的不同,還可能返回 2 、 3 、 4 等值。在Linux中,變數 $? 記錄了上次命令的返回值。使用 echo $? 可以查看上次命令執行成功與否。Bash腳本的返回值默認為最後一條命令的返回值,很多時候這並不是我們想要的結果,因此常常在腳本最後使用 exit 0 顯式聲明返回值。
遵循上面的規則,我們可以編寫出自己的第一個Bash腳本: hello_world ,它的作用是在命令行列印一條消息。
切換到該腳本所在目錄, bash hello_world 運行該腳本,不出意外的話,恭喜你寫出了第一個Bash腳本。
通常人們不採用 bash hello_world 這種方式運行Bash腳本,而是賦給腳本可執行許可權,直接運行腳本:
有些同學會在運行腳本時碰到一個問題:既然已經在當前目錄下,為什麼直接運行 hello_world 會報命令找不到的錯誤?這是因為 當前目錄並不包含在$PATH 路徑下。Linux執行一個程序時,總是在系統環境變數$PATH里找對應的可執行程序,如果找不到,就會報命令找不到的錯誤。我們可以列印出$PATH變數 echo $PATH ,顯然,當前路徑並沒有包含在裡面。
為了方便,系統管理員通常把Bash腳本保存在 /usr/local/bin 和 $USER/bin 目錄下,因為這些目錄默認包含在系統環境變數$PATH里。我喜歡在當前用戶目錄下新建一個 bin 目錄,然後將該目錄加入$PATH,就可以直接在這里編寫Bash腳本了。
編寫Bash腳本時手一滑,可能會將腳本命名為 test ,此時執行腳本會得到意想不到的結果:
使用 which 和 type 命令檢查後發現,事實上執行了一條內置的Linux命令。此時就需要明確指定路徑來執行該腳本了: ./test 。最好是能在命名時注意沖突,隨著對Linux的熟悉,這種情況會慢慢好起來的。
最後為大家布置一道練習題:編寫一個Bash腳本,在當前目錄下生成一個日誌文件,隨意輸入一些內容,備份該文件,並將原始日誌文件內容清空。如果對Linux命令不熟悉,可能要查閱一些資料:如何輸出一些文本到文件、如何清空文件內容等。
讀者若對Bash腳本感興趣,可閱讀 Advanced Bash-Scripting Guide 深入學習,祝大家學習快樂!
