關於shell if控制語句和echo>>到xxx.sh的筆記

A.打印時間戳:

date的話你用$()引起來,或者鍵盤左上角那個符號引起來才能執行

echo "time is $(date +%T)!"像這樣

echo ./run_nets.sh $(pwd)/$onchip_temp >> nansong_run_nets.sh

B.shell if語句:

 菜鳥我最近在學習shell腳本,自己寫了個很簡短的腳本測試下,一直報錯“syntax error near unexpected token `then' ”。上網google了一圈也沒發現原因。原來我在寫if條件判斷的時候,if後面缺少一個空格

[plain] view plain copy
  1. if [ 判斷條件 ]  
       在寫if條件判斷的時候,要注意不但if後面需要空格,而且“ [ ” 後面 和“ ] ”前面都需要有空格。有沒有感覺很無語。還有一點需要謹記,在shell腳本中當使用“ = ”給變量賦值的時候,在 “ = ”兩邊一定不能加空格,否者會把變量名當作一個命令來執行而報出“ command not found ”的錯誤,但是在if條件判斷的時候,if [ "判斷條件" ] 判斷條件中需要用到比較的時候則“ = ” 或者 " != "的兩邊都需要用空格隔開。另外在寫if判斷的時候,不要忘記then,否者也會有問題。當然elif(相當於else if)是可選的。

      下面再總結一下shell腳本中,if判斷中的測試選項。


1,關於文件的判斷

       返回 true 如果...

       -e 文件存在
       -f file 是一個 regular 文件(不是目錄或者設備文件)
       -s 文件長度不爲 0
       -d 文件是個目錄
       -b 文件是個塊設備(軟盤,cdrom 等等)
       -c 文件是個字符設備(鍵盤,modem,聲卡等等)
       -p 文件是個管道
       -h 文件是個符號鏈接
       -L 文件是個符號鏈接
       -S 文件是個 socket
       -t 關聯到一個終端設備的文件描述符
           這個選項一般都用來檢測是否在一個給定腳本中的 stdin[-t0]或[-t1]是一個終端
       -r 文件具有讀權限(對於用戶運行這個 test)
       -w 文件具有寫權限(對於用戶運行這個 test)
       -x 文件具有執行權限(對於用戶運行這個 test)


         -g  set-group-id(sgid)標誌到文件或目錄上,如果一個目錄具有 sgid 標誌,那麼一個被創建在這個目錄裏的文件,這個目錄屬於創建這個目錄的用戶組,並不一定與創建這個文件的用戶的組相同.對於 workgroup 的目錄共享來說,這非常有用.見<<UNIX 環境高級編程中文版>>第 58 頁.

         -u  set-user-id(suid)標誌到文件上如果運行一個具有 root 權限的文件,那麼運行進程將取得 root 權限,即使你是一個普通用戶.[1]這對於需要存取系統硬件的執行操作(比如 pppd 和 cdrecord)非常有用.如果沒有 suid 標誌的話,那麼普通用戶(沒有 root 權限)將無法運行這種程序.見<<UNIX 環境高級編程中文版>>第 58 頁.
-rwsr-xr-t
1 root
178236 Oct 2 2000 /usr/sbin/pppd
對於設置了 suid 的文件,在它的權限標誌中有"s".

        -k  設置粘貼位,見<<UNIX 環境高級編程中文版>>第 65 頁.對於"sticky bit",save-text-mode 標誌是一個文件權限的特殊類型.如果設置了這個標誌,那麼這個文件將被保存在交換區,爲了達到快速存取的目的.如果設置在目錄
中,它將限制寫權限.對於設置了 sticky bit 位的文件或目錄,權限標誌中有"t".
drwxrwxrwt
7 root
1024 May 19 21:26 tmp/
如果一個用戶並不時具有 stick bit 位的目錄的擁有者,但是具有寫權限,那麼用戶只能在這個目錄下刪除自己所擁有的文件.這將防止用戶在一個公開的目錄中不慎覆蓋或者刪除別人的文件,比如/tmp(當然 root 或者是目錄的所有者可以隨便刪除或重命名其中的文件).

-O 你是文件的所有者.
-G 文件的 group-id 和你的相同.
-N 從文件最後被閱讀到現在,是否被修改.

       f1 -nt f2     文件 f1 比 f2 新

       f1 -ot f2     f1 比 f2 老

       f1 -ef f2     f1 和 f2 都硬連接到同一個文件.

       !                非--反轉上邊測試的結果(如果條件缺席,將返回 true)


2,關於字符串的判斷

       str1 = str2       當兩個串有相同內容、長度時爲真
       str1 != str2      當串str1和str2不等時爲真
       -n str1        當串的長度大於0時爲真(串非空)
       -z str1        當串的長度爲0時爲真(空串)

       str1          當串str1爲非空時爲真


3,數字的判斷
      int1 -eq int2    兩數相等爲真

      int1 -ne int2    兩數不等爲真
      int1 -gt int2     int1大於int2爲真
      int1 -ge int2    int1大於等於int2爲真
      int1 -lt int2      int1小於int2爲真
      int1 -le int2     int1小於等於int2爲真

舉例: if [ $file == onchip* ];then
                onchip_temp=$file
a=10
b=20
if [ $a == $b ]
then
   echo "a 等於 b"
elif [ $a -gt $b ]
then
   echo "a 大於 b"
elif [ $a -lt $b ]
then
   echo "a 小於 b"
else
   echo "沒有符合的條件"
fi

發佈了3 篇原創文章 · 獲贊 31 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章