Linux編寫Shell腳本入門


一、 一般編寫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"
View Code

可以參考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"    #注意:當多於兩個命令時,一定要把所有命令以分號的方式寫在雙引號里面。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM