一、 一般編寫shell需要分3個步驟
1. 新建一個腳本文件,並編寫程序
vi hello.sh
#!/bin/bash #注釋 #輸出 printf '%s\n' "Hello World!" echo "Hello World!"
2. 給該文件添加執行權限
chmod +x hello.sh
如果權限不夠,可以用管理員權限
sudo chmod +x hello.sh
3. 執行腳本
相對路徑,在這個腳本所在的文件下,
./hello.sh
絕對路徑,假設我的文件在/home/user/hello.sh
./home/user/hello.sh
可以不給文件加權限(即不要第2步)直接執行,如下命令:
bash hello.sh
sh hello.sh
4. 輸出結果如下
Hello World!
Hello World!
二、 計算程序運行時間
1. 首先獲取時間

#!/bin/bash #獲取當前時間 yyyy-MM-dd HH:mm:ss 格式 nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` #獲取當前日間 HH:mm:ss 格式 nowtime2=`date --date='0 days ago' +%H:%M:%S` printf '%s\n' "A is: $nowtime" printf '%s\n' "A is: $nowtime2"
可以參考www.2cto.com/os/201512/455379.html
2. 執行程序
其中sum是我寫的c語言程序編譯后的文件
#!/bin/bash #絕對路徑 /home/hadoop/zc/c/sum #相對路徑 #./sum
3. 程序運行時間(延時)
Linux shell腳本中的延時
可以使用sleep或usleep函數:
i: sleep:默認為秒
sleep 1s 表示延時1秒
sleep 1m 表示延時1分鍾
sleep 1h 表示延時1小時
sleep 1d 表示延時1天
ii: usleep:默認為微秒
1s = 1000ms = 1000000us
#!/bin/bash #s為單位 #date中有很多控制格式的,其中%s是獲取當前時間距離1970-01-01 00:00:00 UTC的時間差。 #記錄開始時間 start=$(date +%s) #程序 sleep 5s #記錄結束時間 end=$(date +%s) #計算時差 time=$(( $end - $start )) #輸出 #echo $time printf '%s\n' "sleep $time seconds"
4. 程序執行時間(以sum為例)
#!/bin/bash #s為單位 #date中有很多控制格式的,其中%s是獲取當前時間距離1970-01-01 00:00:00 UTC的時間差。 #記錄開始時間 start=$(date +%s) #程序 /home/hadoop/zc/c/sum #記錄結束時間 end=$(date +%s) #計算時差 time=$(( $end - $start )) #輸出 #echo $time printf '%s\n' "Program Finished in $time seconds"
三、 先后提交兩個程序
如果兩個程序在一個終端提交,則運行會出現問題。所以兩個程序要在多個終端上運行。
linux Shell新建終端,可以參考Ubuntu下自動打開多終端的多個標簽並執行不同腳本的方法
#!/bin/bash #新建終端 gnome-terminal #新建標簽頁 #gnome-terminal --tab
但是,新建終端后,兩個程序還是在同一個終端上運行,還會出問題。
i: 一個腳本的實現,運行兩個程序。(以sum為例,假設sum在/home/user下面)
#!/bin/bash printf '%s\n' "Hello test!" gnome-terminal -x bash -c "/home/user/sum;exec bash"
ii: 我用兩個腳本做的,第一個腳本是wc.sh,第二個腳本是pi.sh,我們執行第一個腳本,第一個腳本延遲5s后自動調用第二個腳本如下:
#!/bin/bash printf '%s\n' "Hello WC!" #休眠5s sleep 5s # #./pi.sh gnome-terminal -x bash -c "bash ./pi.sh;exec bash"
#或者
#gnome-terminal -x bash -c "./pi.sh;exec bash"
#!/bin/bash #新建終端 #gnome-terminal -x bash -c "ls; exec bash" printf '%s\n' "Hello Pi!"
最后效果是先打印出Hello WC! ,然后等5秒,創建一個新終端,並調用pi.sh ,這時開始執行pi.sh,結果是打印Hello Pi!
關於怎樣在新的終端調用程序,可以參考gnome-terminal技巧
四、 linux 下如何通過ssh到其他機器然后執行命令
這里ssh免密鑰連接就不講了。
如果我連到另一台機器上只是執行一個命令可以這樣寫:
ssh hostname@IP cd /opt/ #其中 hostname是你要連接機器的用戶名,IP是其對應的IP地址
如果我連到另一台機器上執行多於一個命令可以這樣寫:
ssh hostname@IP "cd /opt/;pwd" #注意:當多於兩個命令時,一定要把所有命令以分號的方式寫在雙引號里面。