Shell腳本編程


1.linux中的變量

linux中的變量分為環境變量和普通變量,其中環境變量可以理解為全局變量,在所有shell的子程序中都可以引用,普通變量只能在自己的shell程序中使用,程序結束后變量無法保留。

設置環境變量的方法:

1.export命令 用戶退出后失效

export test=12312

2..bash_profile、.bashrc、etc/bashrc或者etc/profile中定義

用戶的環境變量:
    ls /root/.bashrc(推薦文件)
    ls /root/.bash_profile
全局變量配置
    /etc/profile
    etc/bashrc(推薦)
    
所有環境變量應該為大寫

查看環境變量:

env查看環境變量列表
set 輸出所有變量(包括環境變量和普通變量)

unset消除環境變量

unset $PATH
2.變量定義
本地變量定義三種方法:

a=123+ $a 變量會被解析

a=123
b=123$a
echo $b

輸出以下:

123123

a='123 + $a' 變量不會被解析,單引號中的字符串原樣輸出
a=123
b='123$a'
echo $b

輸出為:

123$a

a="123" 變量解析--一般用此種方法定義變量

a=123
b="123$a"
echo $b
命令結果作為變量的值(常見用法):
a=$(ls)

3.對於字符串的操作

輸出字符串長度:

name="testName"

方法一:

echo ${#name}

輸出結果:

8

方法二:

echo ${name}|wc -L

方法三:

expr length "${name}"
截取字符串內容:

首先定義字符串:

name=testNametestName

截取字符串:

echo ${name:2} 從第二位開始截取

輸出結果:

stNametestName
字符串匹配
echo ${name#t*N} 從頭開始最短匹配

輸出為:
ametestName

最長匹配:

echo ${name##t*N} 從頭開始最長匹配

輸出為:
ame
從尾開始匹配:

echo  ${name%N*e}

輸出為:

testNametest

最長匹配:
echo ${name%%N*e}
test

字符串的替換:
echo ${name/test/test1} 從頭匹配替換第一個

echo ${name//test/test1} 從頭匹配替換所有
將以下文件名中的all去掉
test-all-1.txt  test-all-2.txt  test-all-3.txt  test-all-4.txt  test-all.txt

腳本為:

 for f in $(ls *.txt)
    do
       mv ${f} ${f//all/}
    done

4.算術運算

方法一:

echo $((2+2))
4

方法二:

let a=12+12
echo ${a}
24

方法三:

expr 12 % 3
0

echo "123 122" |awk '{print ($1-$2)}'
$[]  echo $[12+12]  a=$[12+12+12]

5.條件判斷語句:

方法一:

test
test -f test4.txt && echo true || echo false

方法二:

[]
[ -f test4.txt ] && echo true || echo false 文件test4.txt存在輸出true,不存在輸出false

方法三:

[[]] 括號前后加空格
[[ -f test4.txt ]] && echo true || echo false

字符串測試:

[ -z "" ] && echo false  -z 字符串長度為0的時候為真
[ -n "test" ] && echo true || echo false -n 字符串長度不為0的時候為真

[ "test" == "test" ] && echo true 字符串是否相等 同= !=

等號和中括號兩端需要有空格

整數的比較:
[ 2 -eq 3 ] && echo true || echo false

邏輯操作符:
-a -o ! 與或非
[ 2 -eq 2 -a 3 -eq 3 ] && echo true || echo false

6.if條件語句

單分支結構:
if<條件表達式>
then
    指令
fi

if <條件表達式>; then
指令
fi

多分支:

if<條件表達式>
    then
else

fi

多分支:

if<條件表達式>
    then
elif<條件表達式>
    then
else
fi

7.shell函數

functiontest.sh腳本內容:

function testFun(){
        echo "function test! hello $1";
}

testFun $1

sh functiontest.sh testname

while和until循環

while<條件表達式>
do
    命令
done

until<表達式>
do
done

腳本后台運行:

sh functiontest.sh&
control + c 停止
control + z 暫停

for 語句

for((i=1;i<5;i++))
 do
   echo $i
done

select 語句

select name in ywp hf csq
do
    echo $name
done

break n 跳出整個循環
continue n 跳出本次循環

數組:
array=(ywp hf jc yc)
echo ${array[1]}

方法二:

array=([1]=one [2]=two [3]=threee )
echo ${array[1]}
echo ${array[*]} *打印整個數組的內容

for循環打印數組內容

 array=(test1 test2 test3)
 for name in ${array[*]}
 do
    echo ${name}
done

動態數組:

array=($(ls))
echo ${array[*]}
echo ${#array[*]} 打印數組長度

9.shell腳本開發規范

1.全局變量 全部大寫
2.局部變量 駝峰
3.變量引用 ${}
4.字符串變量引用 "${}"
5.統一使用.sh命名
6.啟動和停止統一使用start和stop開頭
7.通用變量放在config目錄下
8.中括號兩邊添加空格

shell腳本調試:

sh [-nvx] test.sh
-n 不執行,僅檢查語法問題
-x將執行的腳本輸出到屏幕上

vim 配置:

echo 'alias vi=vim' >>/Users/xxx/.bash_profile
source /Users/xxx/.bash_profile

對於vim的推薦配置和使用shell腳本的一個實踐:

shell腳本生成數據庫文檔

vim推薦配置


免責聲明!

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



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