天天看點

shell腳本開發總結

最近在用shell開發一套mysql備份恢複系統,因為之前隻是從書上看過一些linux和shell的部分知識,應用的機會很好,是以邊開發邊重新溫習一下之前的知識。下面是在開發過程中遇到或者使用的一些知識點,記錄下來以便以後再用:

1).swp檔案。這裡它的作用類似于windows下的.bak檔案,是用來做恢複使用的。下面是摘抄的<鳥哥基礎>中的說明:

關于檔案的回複與暫存盤 

另外,其實 vi 是具有『可回複』功能的呢!那麼 vi 憑什麼幫我們進行回複的功能呢? 很簡單啊!憑暫存檔啊!舉例來說,當我們編輯一個檔案時,假設名稱為 /tmp/passwd , 那麼在這個 /tmp 底下就會有一個臨時檔案,檔名為『 /tmp/.passwd.swp 』,這是一個隐藏檔, 我們所進行的一些修改都會暫時存在這個檔案當中,萬一在檔案修改過程中, 系統挂了,那麼下次你再重新 vi /tmp/passwd 時,系統就會告訴您,是否需要回複『Recovery』成修改過程中的模樣? 如果您按下 (R) ,嘿嘿!就可以将資料回複到修改過程的樣子,而不是源檔案啰! 這是個很有用的功能喔! ^_^ 這也就是說,如果有一天,您去 /tmp 底下,執行 ls -al 時,發現到底下有兩個檔案, 檔名分别為 passwd 與 .passwd.swp 的話,那麼 (1) 可能有人在編輯這個檔案; (2) 之前您在編輯這個檔案時,因為某些不知名的因素導緻 vi 程式中斷,則該暫存檔就會存在。 如果是狀态 (2) ,則此時您可以将該 .passwd.swp 檔案删除,或者是,直接 vi /tmp/passwd , 在 vi 出現是否回複時,選擇回複,然後儲存更新 /tmp/passwd ,之後再将這個 /tmp/.passwd.swp 檔案删除即可! 如果不删除的話,那麼每次編輯這個檔案,都會告知您該檔案有問題啊!

2)echo –e “output”

   echo後面跟着參數-e,然後後面跟輸出内容。-e參數的作用是将output中的特殊字元/當成轉移字元處理,例如:

   echo  “output\n”  ===>輸出内容為:output\n

   echo  -e “output\n”===>輸出内容為:output ,然後後面帶一換行符進行換行操作。

3)date的格式輸

    僅僅輸出年月日:`date +%Y%m%d`  或者加入反斜線進行格式化 `date +%Y/%m/%d`;

    僅僅輸出時分秒: `date +%H:%M:%S`

    輸出完整的時分秒:`date +’%/Y%m/%d +%H:%M:%S’`

   --date參數,例如輸出30天以前的日期:`date --date=’30 days ago’ +%y/%m/%d`;

4) exit xxx:終止程式并回傳給系統的值。(預設情況下傳回0表示腳本執行成功,傳回1表示異常)

   系統獲得回傳的值存儲在特殊變量:$?,列印出來可以用echo $?;

附linux中的特殊變量:

5)讓程式暫停休眠n秒後執行

   sleep n;----機關為秒

6)清空檔案内容的指令:(1):>filename  (2)cat /dev/null > file

7) 讀取檔案的行數

   cat filename | wc –l

8) 如何判斷某字元串是否為數字

9)if判斷條件如何取反

eg.

if !([ -e /etc/passwd ]);then

   echo "/etc/passwd not exists!";

fi

10)如何獲得執行腳本檔案所在的絕對路徑

relative_path=$(0%/*); ##從最後面的字元開始删除直到第一個/為止,如果删除到最後一個/,則寫為:$(0%%/*);

absolute_path=`cd $relative_path | pwd`

11)如在在腳本執行時,使使用者輸入的密碼不回顯

12)如何一行一行讀取檔案的内容

13)read 讀取内容賦予變量注意點

14) 獲得字元串的長度

(1)len=`expr length $str`

len=`echo $str|awk '{print length($0)}'`

(2)str="hello"

echo ${str} | wc -L

(3)echo ${#s}

15)判斷某個字元出現的次數

chooseDBs=${chooseDB//[^,]}; ##### [^,] 這裡的^是反向選擇的意思,表示沒有逗号的 ,都被空來置換

declare -i v_CountDBs=${#chooseDBs}+1;

16)字元串不等于何數字不等于

17)判斷字元串是否為空

if [ -n "$testStr" ];then

echo "The string $testStr is not null!";

fi;

或者

if ![ -z "$testStr" ];then

本文轉自 yubowei 51CTO部落格,原文連結:http://blog.51cto.com/samyubw/239660