ubuntu---shell腳本:if - then 語句 和 test命令


 

一、基本結構化命令if-then語句格式:

if  command
then
    command
fi

解釋:bash shell的if語句會運行if后面的那個命令。
如果該命令的退出狀態碼是0(該命令成功運行),位於then部分的命令就會被執行。
如果該命令的退出狀態碼是其他值,then部分的命令就不會被執行。
fi語句用來表示if-then語句到此結束。

二、test命令
Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。

if-then語句不能測試命令退出狀態碼之外的條件,test命令提供了在if-then語句中測試不同條件的途徑。
如果test命令中列出的條件成立,test命令就會退出並返回狀態碼0。

test命令的格式:

test condition

condition是test命令要測試的一系列參數和值。當用在if-then語句中時,test命令看起來是這樣的。

if test condition
then
    command
fi

另一種寫法:

if [condition]
then
    command
fi

第一個方括號和第二個方括號之前必須加上一個空格,否則會報錯
test命令可以判斷三類條件:
1)數值比較
2)字符串比較
3)判斷文件
  test File1 –ef File2 兩個文件具有同樣的設備號和i結點號
  test File1 –nt File2 文件1比文件2 新
  test File1 –ot File2 文件1比文件2 舊
  test –b File 文件存在並且是塊設備文件
  test –c File 文件存在並且是字符設備文件
  test –d File 文件存在並且是目錄
  test –e File 文件存在
  test –f File 文件存在並且是正規文件
...

@https://blog.csdn.net/weixin_36586564/article/details/78843172


三、tr 命令

tr = translate的簡寫。

tr 命令用於轉換或刪除文件中的字符。
tr 指令從標准輸入設備讀取數據,經過字符串轉譯后,將結果輸出到標准輸出設備。
tr 命令主要用來從標准輸入中通過替換或刪除操作進行字符轉換,然后打印輸出到標准輸出。
可以通過管道或重定向標准輸入來獲得 tr的輸入數據。
tr 對輸入數據可以進行三種操作: 字符替換、壓縮重復字符和刪除字符。
  tr命令格式:

tr [OPTION] String1 [String2]  

1.在tr中string1和string2用來指示一個字符集合范圍。可以是下面的一些形式(一般要加雙引號):
     1) [a-d] : [a-d]表示abcd,常用的有[a-z]、[A-Z]、[0-9]等,[bfgh]表示 bfgh。可以加上單或雙引號
     2) [C*n] : 表示字符 C 重復出現指定次數n。因此,[F*3]表示FFF。一般只能出現在 string2中。
     3) \nnn : 三位八進制數,對應有效的 ASCII 字符。一般用於表示特定的控制字符。

2.選項"-c": 表示用在輸入數據中出現,但是不包含在 string1 字符范圍內的字符組成的集合,代替原來的 string1。
在 tr 的三類操作中都可以使用選項"-c"。

  eg: echo "adcfghg" | tr -cd fgca  
  // 將顯示 acfgg  輸入數據中不包含在 string1 中的字符范圍 是"dh"  ,所以,實際上只是刪除了字符"dh" 

3.tr 用於字符替換: 只需要同時給出 string1 和 string2,可以需要不指定特別的選項。
   1) Usage: tr string1 string2
     輸入數據中屬於 string1 字符范圍內的字符都將被替換,string1 中的第 n 個字符被替換為 string2 中的第 n個字符。

    eg: echo "adcfgh" | tr adcgw vbnle  
    // 將顯示 vbnflh (v 替換 a,b 退回 d  ,n 替換 c,l 替換 g...) 

     2) 一般 string1 和 string2 的字符個數應該相同。如果字符個數不同,分為兩種情況:
     ① string1 的字符個數少於 string2 的字符個數: string2 種額外的字符將被忽略。  
     ② string1 的字符個數多於 string2 的字符個數,又可分為兩種情況:
      ·對於 BSD 系列的系統: tr 會重復 string2 中的最后一個字符,直到補齊到 string1 一樣的長度。
      ·對於 System V 的系統 : tr 將截去 string1 中超長的部分。
       GUN tr 使用 BSD 方式,如果想使用 System V 方式,需要指定選項"-t"。
       eg: echo "addcfghg" | tr  adcgw vbn     // 將打印 vbbnfnhn
           echo "addcfghg" | tr  -t adcgw vbn  // 將打印 vbbnfghg
  

 3) tr 的字符替換操作主要用途有 大小寫轉換等。
      eg: tr [a-z] [A-Z] < video.txt  // 將文件 video.txt 中的所有小寫字母轉換成大寫字母
          tr ":" "\011" < /etc/passwd  // 將 passwd 文件的域分隔符改為"\011"即"TAB"
 

 4.tr 用於刪除字符: 使用選項"-d"。  
  1) Usage: tr -d string1  
   輸入數據中所有在 string1 中出現過的字符都將被刪除。
  2) echo "This is a note !"| tr -d [:space:] // 將打印 Thisisanote  即刪除所有空格  
     tr -cd "[a-z][A-Z][\n]"  

 5.tr 用於壓縮重復字符: 使用選項"-s"。壓縮操作可以單獨進行,也可以在替換操作或刪除操作之后進行,因而分成 3 種情況。

@blog.sina.com.cn/s/blog_54dd80920102v1wc.html


 echo $dir | tr "." "\n"
(1) | 運算符
管道符號,是unix一個很強大的功能,符號為一條豎線:"|"。
用法:

command 1 | command 2

它的功能是把第一個命令command 1執行的結果作為command2的輸入傳給command 2,例如: ls -s | sort -nr

(2)Usage: tr string1 string2
   輸入數據中屬於 string1 字符范圍內的字符都將被替換,string1 中的第 n 個字符被替換為 string2 中的第 n個字符。
eg: echo "adcfgh" | tr adcgw vbnle  // 將顯示 vbnflh (v 替換 a,b 退回 d  ,n 替換 c,l 替換 g...)

    echo $dir | tr "." "\n"

 


免責聲明!

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



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