shell腳本總結

shell進階:
列表生成方式:
列表生成方式:
(1) 直接給出列表 
以空白為間隔
(2) 整數列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,
如:.sh
(5) 變量引用;
$@, $

while read line(用法)(用于遍歷文件,進行處理)
代碼段:#!/bin/bash
while read line;do
        var1=echo $line | cut -d ":" -f5
        var2=echo $line | cut -d ":" -f1
        [[ -z $var1 ]] && chfn -o 13760224840$var2 $var2
done </etc/passwd
代碼解釋:line可以為任意變量,從/etc/passwd中一次讀取一行文件,用來修改/etc/passwd中的office字段
select 用法)(經常結合case使用) 
代碼段

!/bin/bash

PS3=”please input your answer: “
select var in “A” “B” “C” “D”
do
echo “your input is $REPLY”($REPLY是系統內置變量)

if [[ -n $var ]];then
echo “your answer is $var”
break
else
echo “your selection is invalid”
fi
done
信號捕捉trap
? trap ‘觸發指令’ 信號自定義進程收到系統發出的指定信號后,將執行觸發指令,而不會執行原操作
? trap ” 信號 忽略信號的操作
? trap ‘-‘ 信號 恢復原信號的操作
? trap -p 列出自定義信號操作
函數:
函數的定義放在特定文件中,用.路徑進行調用
函數返回值return和exit return退出函數,exit退出腳本
return 從函數中返回,用最
return 0 無錯誤返回。
return 1-255 有錯誤返回

函數可以接受參數:
傳遞參數給函數:調用函數時,在函數名后面以空白分隔
給定參數列表即可;例如“testfunc arg1 arg2 …”
可以使用$@, $*, $#等特殊變量
變量作用域:
環境變量:當前shell和子shell有效
本地變量:只在當前shell進程有效,為執行腳本會啟動
專用子shell進程;因此,本地變量的作用范圍是當前shell腳本程序文件,包括腳本中的函數
局部變量:函數的生命周期;函數結束時變量被自動銷毀
? 注意:如果函數中有局部變量,如果其名稱同本地變量,使用局部變量
? 在函數中定義局部變量的方法
local NAME=VALUE
數組:
數值索引(數值格式)和關聯索引(自定義格式)
數組聲明:
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 關聯數組
數組賦值:
1)一次只賦值一個元素;ARRAY_NAME[INDEX]=VALUE
2)一次賦值全部元素:ARRAY_NAME=(“VAL1” “VAL2” “VAL3” …)
3)只賦值特定元素:ARRAY_NAME=([0]=”VAL1″ [3]=”VAL2″ …)
4)交互式數組值對賦值read -a ARRAY
數組引用:
1)引用數組元素: ${ARRAY_NAME[INDEX]}注意:省略[INDEX]表示引用下標為0的元素
2)數組的長度(數組中元素的個數):${#ARRAY_NAME[]}${#ARRAY_NAME[@]}
3)引用數組所有元素${ARRAY_NAME[@]}
數組處理:
1)數組切片: ${ARRAY[@]:offset:number}
offset: 要跳過的元素個數 number: 要取出的元素個數
取偏移量之后的所有元素:${ARRAY[@]:offset}
2)向數組中追加元素:ARRAY[${#ARRAY[
]}]
3)刪除數組中的某元素:導致稀疏格式:unset ARRAY[INDEX] 刪除整個數組: unset ARRAY
字符串:
${expression}一共有9種使用方法。
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word} 
上面4種可以用來進行缺省值的替換。
${#parameter}
上面這種可以獲得字符串的長度。 
${parameter%word} 最小限度從后面截取word
${parameter%%word} 最大限度從后面截取word
${parameter#word} 最小限度從前面截取word
${parameter##word} 最大限度從前面截取word
上面4個就是用來截取字符串的方法了。
有了著四種用法就不必使用cut命令來截取字符串了
第一種又可以分為四種情況,下面一一介紹。

1、使用 # 號操作符。用途是從左邊開始刪除第一次出現子字符串即其左邊字符,保留右邊字符。用法為#substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str#
//}
得到的結果為www.你的域名.com/cut-string.html,即刪除從左邊開始到第一個”//”及其左邊所有字符
2、使用 ## 號操作符。用途是從左邊開始刪除最后一次出現子字符串即其左邊字符,保留右邊字符。用法為##substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str##
/}
得到的結果為cut-string.html,即刪除最后出現的”/”及其左邊所有字符
3、使用 % 號操作符。用途是從右邊開始刪除第一次出現子字符串即其右邊字符,保留左邊字符。用法為%substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str%/
}
得到的結果為http://www.你的域名.com,即刪除從右邊開始到第一個”/”及其右邊所有字符
4、使用 %% 號操作符。用途是從右邊開始刪除最后一次出現子字符串即其右邊字符,保留左邊字符。用法為%%substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str%%/
}
得到的結果為http://www.你的域名.com,即刪除從右邊開始到最后一個”/”及其右邊所有字符

字符串處理2,分別介紹如下:
1、從左邊第幾個字符開始以及字符的個數,用法為:start:len,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${var:0:5}
其中的 0 表示左邊第一個字符開始,5 表示字符的總個數。
結果是:http:
2、從左邊第幾個字符開始一直到結束,用法為:start,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${var:7}
其中的 7 表示左邊第8個字符開始
結果是:www.你的域名.com/cut-string.html
3、從右邊第幾個字符開始以及字符的個數,用法:0-start:len,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str:0-15:10}
其中的 0-6 表示右邊算起第6個字符開始,10 表示字符的個數。
結果是:cut-string
3、從右邊第幾個字符開始一直到結束,用法:0-start,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str:0-4}
其中的 0-6 表示右邊算起第6個字符開始,10 表示字符的個數。
結果是:html
注:(左邊的第一個字符是用 0 表示,右邊的第一個字符用 0-1 表示)
字符串替換:
${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替換之
${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替換之
${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替換之
${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替換之
查找并刪除
${var/pattern}:查找var所表示的字符串中,刪除第一次被pattern所匹配到的字符串
${var//pattern}:所有${var/#pattern}:行首
${var/%pattern}:行尾
字符大小寫轉換
${var^^}:把var中的所有小寫字母轉換為大寫
${var,,}:把var中的所有大寫字母轉換為小寫
創建臨時文件
mktemp命令:創建并顯示臨時文件,可避免沖突
? mktemp [OPTION]… [TEMPLATE]
TEMPLATE: filename.XXX
X至少要出現三個
? OPTION:
-d: 創建臨時目錄
-p DIR或–tmpdir=DIR:指明臨時文件所存放目錄位置
? 示例:

mktemp /tmp/test.XXX

tmpdir=mktemp –d /tmp/testdir.XXX

mktemp –tmpdir=/testdir test.XXXXXX

安裝復制文件install(與cp的區別是可以改變文件的權限)
install命令:
install [OPTION]… [-T] SOURCE DEST 單文件
install [OPTION]… SOURCE… DIRECTORY
install [OPTION]… -t DIRECTORY SOURCE…
install [OPTION]… -d DIRECTORY…創建空目錄
? 選項:
-m MODE,默認755
-o OWNER
-g GROUP
? 示例:
install -m 700 -o wang -g admins srcfile desfile
install –m –d /testdir/installdir

原創文章,作者:919022966,如若轉載,請注明出處:http://www.www58058.com/79688

(2)
919022966919022966
上一篇 2017-07-09 21:58
下一篇 2017-07-10 08:45

相關推薦

  • 計算機網絡基礎及常用工具

    Linux網絡屬性配置      計算機網絡:      TCP/IP: 協議棧(使用)      ISO, OSI: 協議棧(學習)  MAC:Media Access Control      48bits:   &…

    Linux干貨 2017-01-02
  • 無插件Vim編程技巧

    相信大家看過《簡明Vim教程》也玩了《Vim大冒險》的游戲了,相信大家對Vim都有一個好的入門了。我在這里把我日常用Vim編程的一些技巧列出來給大家看看,希望對大家有用,另外,也是一個拋磚引玉的過程,也希望大家把你們的技巧跟貼一下,我會更新到這篇文章中。另外,這篇文章里的這些技巧全都是vim原生態的,不需要你安裝什么插件。我的Vim的版本是7.2。 瀏覽代碼…

    Linux干貨 2015-04-01
  • 馬哥教育網絡班25期+第一周課程練習

    一、計算機的組成及功能     現代計算機的結構:馮諾依曼結構體系(儲存程序,順序執行),由20世紀30年代中期,美國科學家馮·諾依曼提出     馮.諾依曼結構處理器具有以下幾個特點:     1:必須有一個存儲器;2:必須有一個控制器;3:必須有一個運算器…

    Linux干貨 2016-11-28
  • 文件系統管理&raid&腳本編程之參數、算數運算練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; (1) ~]# fdisk /dev/sdb Welcome to…

    Linux干貨 2016-11-08
  • 2016/08/11:初涉shell腳本編程

    感悟 :    經過對文本處理工具grep,sed等內容的,以及vim文本編輯器的學習,馬不停蹄的又進行了對shell腳本的學習。對shell腳本的認識是可以保存在本地,用的時候只要執行相關腳本,簡短的命令就可以完成操作,可以用來應對日常重復性工作,有效提高系統管理員的效率,避免在重復性工作上花費不必要的時間。 *************…

    Linux干貨 2016-08-16
欧美性久久久久