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
下一篇 2017-07-10

相關推薦

  • 如何在CentOS上構架一個簡易的局域網web服務器

    首先,要取得適用你系統版本的http源碼包,這里推薦兩個網站: httpd.apache.org www.kernel.org 根據自己系統的版本下載相應的源碼包; CentOS7 下載 httpd-2.4.25.tar CentOS6 下載 httpd-2.2.32.tar 以CentOS 6 示例: 首先,我們先來為http…

    2017-03-09
  • 新文章

    test 新的開始

    Linux干貨 2016-12-08
  • 網絡班第27期第二周作業

    1、 Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關的實例演示。 cp命令:copy 文件à>目錄 文件à>文件 目錄->文件(報錯)           目錄->目錄 常用選項:     &nbsp…

    2017-07-31
  • 源碼包安裝Apache服務

    1、安裝development tools程序包組 安裝Apache服務器前需要解決依賴性問題,比如需要安裝GCC、GCC++、OPENSSL等等,因為是在虛擬機里做實驗,這里就通過直接安裝包組的方法解決依賴性問題。 (1)掛載安裝光盤,并安裝“Development tools”包組 [root@localhost ~]# mount&…

    Linux干貨 2016-08-24
  • 第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 目錄管理類命令: cd:變更目錄   命令格式:cd [DIRECTORY] pwd:顯示當前目錄的絕對路徑 ls:顯示文件或目錄內容     命令格式:ls [OPTION]… [FILE]… &…

    Linux干貨 2017-01-08
  • RHEL6.4 yum訪問HTTPS源時出錯

    在RHEL6.4上安裝OpenStack時,使用epel的源,但源是https的,進行安裝時,總報下面的錯誤。     https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/repodata/repomd.xml:  …

    Linux干貨 2016-02-28
欧美性久久久久