Linux腳本學習筆記

1. 執行腳本文件的方法

  • 先給文件添加可執行權限,再執行
# 假設uad.sh為要執行文件
~$: chmod +x uad.sh  
~$: ./uad.sh
  • 使用 sh命令:
~$: sh uad.sh
  • 使用 source命令:
~$: source uad.sh

2. 查找文件

# 查找 /etc 目錄下以 “.conf” 后綴的文件
~$: find  /etc  -name  "*.conf"  -type  f  
# 統計查找到的文件數目
~$: find  /etc  -name  "*.conf"  -type  f  | wc  -l

3. 重定向操作

重定向名 重定向符號 描述
重定向輸入 < 從指定文件讀取,不從鍵盤輸入
重定向輸出 > , >> 將結果覆蓋 ; 追加到文件
標準錯誤輸出 2> , 2>> 將錯誤信息覆蓋,追加到文件
混合輸出 &> , &>> 將標準輸出與錯誤輸出覆蓋,追加到文件

邏輯名 :邏輯符號

  • 與 : &&
  • 或 : ||
  • 順序執行 : ;
~$: mkdir   /mulu/a  2>  /dev/null  && echo  "成功"
# 只有創建成功才會輸出 “成功”
~$: mkidr  /mulu/a  2>  /dev/null  || echo  "失敗"
# 只有創建失敗才會輸出
~$: cd /boot/grub ;  ls -lh grub.conf

4. 變量

  • 變量的定義與賦值:變量名 = 變量值
  • 引用變量:$變量名 、${變量名}
~$:  Title = BeiDa
~$:  echo $Title
BeiDa
  • 雙引號:允許引用、轉義
  • 單引號':禁止引用、轉義
  • 反撇號 ` 或 $( ) :以命令輸出進行替換
~$: echo "$Title Group"
BeiDa Group
~$: echo '$Title Group'
$Title Group
# 輸出當前linux內核版本號
~$: uname -r
2.6.18-194.e15
# 使用反撇號
~$: ver=`uname -r`
~$: echo $ver
2.6.18-194.e15
  • 環境變量、記錄或設置運行參數
    • 系統賦值:USER, LOGNAME, HOME, SHELL.....
    • 用戶操作:PATH, LANG, CLASSPATH.....
# 輸出當前所有環境變量
~$: env
# 輸出內容。。。。
~$: echo $USER $HOME SHELL
zhangsan  /root  SHELL
~$: echo $LANG
zh_CN.UTF-8
  • 其他特殊變量:由操作系統賦值,不可直接賦值
    變量符號 | 描述
    -- |--
    $? | 前一條命令的狀態值,0為正常,非0為異常
    $0 | 腳本自身的程序名
    $1--$9 | 第1到第9個位置參數
    $* | 命令行的所有位置參數的內容
    $# | 命令行位置參數的個數

5. 數值運算

  • expr命令:expr 數值1 操作符 數值2
  • $[ ]表達式:$[ 數值1 操作符 數值2 ]
  • *號需要轉義! 在 $[]中可不用轉義
~$: expr 2 \* 3
6
~$: x=45; y=12; expr $x+$y
66
~$: echo $[45+12]–<table></table><td></td>
66
~$: echo $[45 * 21]
945
~$: echo $[x-y] ; echo $[$x-$y] # 可加$ 也可不加
24 24
  • 遞增處理:let 變量名++ 、let 變量名--
  • 使用隨機數:RANDOM 變量名
  • 生成數值序列:seq 首數 末數 、seq 首數 增量 末數
~$: x=45 ; let x++; echo $x
46
~$: x=45; let x+=2;  echo $x
47
~$: echo $RANDOM
4411
~$: echo $[RANDOM % 100]
54
~$: seq 3
1
2
3
~$: seq 3  5
3
4
5
~$: seq  3  2 10
3
5
7
9
  • 小數運算:使用 bc 命令處理,將表達式結果傳給 bc
~$: echo "45.67 - 21.05" | bc
24.62
# scale=n 約束小數位數
~$: echo "scale=4;  10/3 " |bc
3.333

6. 字符串操作

  • 字符串截取
    • 路徑截取: dirname , basename 命令
    • expr命令:expr substr $var 起始位置 截取長度 ,起始位置從 1 開始
    • ${ } 命令 :`${ var : 起始位置 : 截取長度 } , 起始位置從 0 開始
~$: var="/etc/httpd/conf/httpd.conf"
~$: dirname $var
/etc/httpd/conf
~$: basename $var
httpd.conf
~$: var=BeiDaQingNiao
~$: expr  substr  $var  4  6
DaQing
~$: echo ${ var :4 :6 }
aQingN
#從開頭開始截取時可以省略起始位置
~$: echo ${ var : :5}
BeiDa
  • 字符串替換
    • ${var/old/new } :將第一個 old 替換為 new,中間沒有空格
    • ${var //old /new } :將所有 old 替換為 new,中間沒有空格
~$: var=BeiDaQingNiao; echo ${var/i/##}
Be##DaQingNiao
~$: var=BeiDaQingNiao; echo ${var//i/##}
Be##DaQ##ngN##ao
  • 獲取隨機字符串
    • /dev/urandom/usr/bin/md5sum/bin/cut
    • 隨機設備 → MD5轉換 → 截取字符串
    • cut命令:cut -b 起始位置-結束位置,起始位置為開,或結束位置為最后時可省略
# 隨機字符 到 ASCII 字符 ,使用cut命令截取從第4個位置到第8個位置間的字符串
~$: head -1 /dev/urandom | md5summ | cut -b 4-8
53364
  • 字符串轉數字
# 轉成16進制的數字后 再加4
temp1=400d7c
echo $((16#${temp1}+4)) 

# 轉成10進制數字
temp1="123"
echo $((10#${temp1}))

7. 條件測試

  • 格式:test 條件表達式[ 條件表達式]
  • 文件狀態:
    • -e : 目標是否存在(Exist)
    • -d:目標是否為目錄(directory)
    • -f:是否為文件(File)
  • 權限檢測:
    • -r:是否可讀(Read)
    • -w:是否可寫(Write)
    • -x:是否可執行(eXcute)
  • 整數比較:
    • -eq:等于(Equal)
    • -ne:不等于(No Equal)
    • -gt:大于(Greater Than)
    • -lt:小于(Lesser Than)
    • -ge:大于或等于(Greater or Equal)
    • -le:小于或等于(Lesser or Equal)
# 統計當前用戶數
~$: who  |  wc -l
2
~$: [$(who | wc -l) -eq 2] && echo YES
YES
  • 字符串匹配
    • =:兩字符串相同
    • !=:兩字符串不同

附錄

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • 個人學習批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復涉及到...
    Luckykailiu閱讀 4,759評論 0 11
  • 基礎命令 主要的命令和快捷鍵 Linux系統命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,115評論 0 0
  • SHELL腳本學習筆記 標簽(空格分隔): linux shell腳本 1. 常用命令匯總 alias 設置別名u...
    浩浩來了閱讀 758評論 0 3
  • 基礎 頭文件 #!/bin/bash 或者#!/bin/sh #!約定的標記,如IOS的Import 執行文件時需...
    ZMJun閱讀 1,244評論 1 2
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數據革命閱讀 12,202評論 2 33