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