標籤:linux shell
第一個shell指令碼
程式
#!/bin/sh #第一行統一這樣寫echo ‘abc‘ #輸出abc
運行(是因為目錄不對)
[email protected]:~$ test.shtest.sh: command not found
方案一
[email protected]:~$ sh test.shabc
方案二(沒有許可權)
[email protected]:~$ ~/test.sh -bash: /home/liuil/test.sh: Permission denied
方案二問題解決(賦予許可權後再執行即可)
[email protected]:~$ chmod u+x test.sh
變數
例子
[email protected]:~$ vim test.sh#!/bin/shi=0 #變數名由字母數字底線組成,不能數字開頭echo ‘$i‘ #單引號不解析echo "$i" #雙引號解析echo ${i}1234echo $PATH #環境變數echo $(date)echo `date`echo $1 #位置變數echo $2
結果
[email protected]:~$ sh test.sh hello world$i001234/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gamesFri Jan 2 09:35:27 CST 2015Fri Jan 2 09:35:27 CST 2015
- 位置變數
date函數的使用
顯示目前時間
[email protected]:~$ date +%Y-%m-%d_%H:%M:%S2015-01-02_19:00:42
顯示目前時間與自1970-01-01 00:00:00以來的秒數差
[email protected]:~$ date +%s1420196538
指定時間輸出
[email protected]:~$ date --date=‘2009-01-01 11:11:11‘Thu Jan 1 11:11:11 CST 2009[email protected]:~$ date --date=‘3 days ago‘Tue Dec 30 19:04:22 CST 2014
時間格式
%% 一個文字的 %%a 當前locale 的星期名縮寫(例如: 日,代表星期日)%A 當前locale 的星期名全稱 (如:星期日)%b 當前locale 的月名縮寫 (如:一,代表一月)%B 當前locale 的月名全稱 (如:一月)%c 當前locale 的日期和時間 (如:2005年3月3日 星期四 23:05:25)%C 世紀;比如 %Y,通常為省略當前年份的後兩位元字(例如:20)%d 按月計的日期(例如:01)%D 按月計的日期;等於%m/%d/%y%e 按月計的日期,添加空格,等於%_d%F 完整日期格式,等價於 %Y-%m-%d%g ISO-8601 格式年份的最後兩位 (參見%G)%G ISO-8601 格式年份 (參見%V),一般只和 %V 結合使用%h 等於%b%H 小時(00-23)%I 小時(00-12)%c 按年計的日期(001-366)%k 時(0-23)%l 時(1-12)%m 月份(01-12)%M 分(00-59)%n 換行%N 納秒(000000000-999999999)%p 當前locale 下的"上午"或者"下午",未知時輸出為空白%P 與%p 類似,但是輸出小寫字母%r 當前locale 下的 12 小時時鐘時間 (如:11:11:04 下午)%R 24 小時時間的時和分,等價於 %H:%M%s 自UTC 時間 1970-01-01 00:00:00 以來所經過的秒數%S 秒(00-60)%t 輸出定位字元 Tab%T 時間,等於%H:%M:%S%u 星期,1 代表星期一%U 一年中的第幾周,以周日為每星期第一天(00-53)%V ISO-8601 格式規範下的一年中第幾周,以周一為每星期第一天(01-53)%w 一星期中的第幾日(0-6),0 代表周一%W 一年中的第幾周,以周一為每星期第一天(00-53)%x 當前locale 下的日期描述 (如:12/31/99)%X 當前locale 下的時間描述 (如:23:13:48)%y 年份最後兩位元位 (00-99)%Y 年份%z +hhmm 數字時區(例如,-0400)%:z +hh:mm 數字時區(例如,-04:00)%::z +hh:mm:ss 數字時區(例如,-04:00:00)%:::z 數字時區帶有必要的精度 (例如,-04,+05:30)%Z 按字母表排序的時區縮寫 (例如,EDT)
標準輸入輸出
0表示標準輸入,1表示標準輸出,2表示錯誤 [email protected]:~$ ls 1>a.txt [email protected]:~$ ls a.txt devProgram Downloads Music Public test.sh Desktop Documents examples.desktop Pictures Templates Videos [email protected]:~$ more a.txt a.txt Desktop devProgram Documents Downloads examples.desktop Music Pictures Public Templates test.sh Videos
定時任務
判斷和迴圈
if
[email protected]:~$ vim test.sh#!/bin/shif [ ‘a‘=‘a‘ ]then echo ‘=‘fi[email protected]:~$ sh test.sh =
for(在ubuntu下可能會失敗,需要 sudo dpkg-reconfigure dash 選擇no)
#!/bin/shfor ((i=0;i<3;i++))do echo $idone[email protected]:~$ ~/test.sh 012
函數
- 最後一行語句是預設返回值
引用自訂函數檔案時,使用source func.sh
#!/bin/shfunction dayAgo(){ date --date="$1 days ago" +%Y-%m-%d}dayAgo 3[email protected]:~$ sh test.sh 2014-12-30
查看函數
[email protected]:~$ man dateDATE(1) User Commands DATE(1)NAMEdate - print or set the system date and time
linux shell入門