1,bash
自定義變量
定義:變量名稱=值
變量名稱:只能由字母,數(shù)字,下劃線組成,不能以數(shù)字開頭
= : 賦值符號 前后不能有空白
值: 所有字符串和數(shù)字都可以,但是你應(yīng)該給字符串加引號
引用變量:$變量名 或 ${變量名}
[root@server shell]# a=8
[root@server shell]# echo $a
[root@server shell]# echo ${a}
8
查看變量: echo $變量名 set(所有變量:包括自定義變量和環(huán)境變量)
#name=tingting
#set | grep tingting
取消變量: unset 變量名
#unset name
作用范圍: 僅在當(dāng)前shell中有效
變量替換之匹配截取:
[root@bogon ~]# a=abcdefg //定義變量
[root@bogon ~]# echo ${a:5} //輸出變量內(nèi)容第5字符之后內(nèi)容
fg
[root@bogon ~]# echo ${a:2:4} //輸出變量"a" (第二位之后開始截取,截取四位)
cdef
bash測試
數(shù)字
-eq 等于 -ne 不等于
-ge 大于等于 -gt 大于
-le 小于等于 -lt 小于
例:
[root@bogon ~]# cat bash.sh
#!/bin/bash
if [ 5 -eq 3 ];then
echo 你是對的
else
echo 你是錯的
fi
[root@bogon ~]# sh bash.sh
你是錯的
文件
-f 存在且是正規(guī)文件
-d 存在且是目錄
-h 存在且是符號鏈接
-b 塊設(shè)備
-c 字符設(shè)備
-S socket
-p pipe
bash判斷
條件判斷
if
if代碼返回0表示真,非0為假
語法:
if [ *判斷* ]; then
*動作*
else
*動作*
fi
##elif:多條件判斷
case
case 語句是 shell 中流控制的第二種方式,語法如下:
case word in
pattern1)
list1
;;
pattern2)
list2
;;
... ...
patternN)
listN
;;
*)
list*
;;
esac
例:
#!/bin/bash
a=8
case $a in
5)
echo "這是5";echo "隨便寫";;
6)
echo "這是6";;
*)
echo 什么都不是;;
esac
bash循環(huán)
循環(huán)
for 循環(huán):
for...do...done
while...do...done
例
練習(xí)編寫腳本:批量生成賬戶并給定賬戶密碼
#!/bin/bash
for i in {1..10}
do
useradd user$i
if [ $? -eq 0 ];then
echo 添加用戶 user$i 成功!
else
echo 添加用戶 user$i 失敗!
exit 6
fi
echo 1 | passwd --stdin user$i
if [ $? -eq 0 ];then
true
else
exit 5
fi
done
while循環(huán)
while cmd
do
list
done
例:
[root@bogon ~]# cat test.sh //循環(huán)輸出0-9
#!/bin/bash
x=0
while [ $x -lt 10 ]
do
echo $x
x=`expr $x + 1`
done
[root@bogon ~]# sh test.sh
0
1
2
3
4
5
6
7
8
9
注:循環(huán)控制:
break
直接跳出大循環(huán)
continue
跳出當(dāng)前這一次循環(huán)
函數(shù)
函數(shù)
定義函數(shù)
調(diào)用函數(shù)
取消函數(shù)
函數(shù)傳參
命名空間
local
#!/bin/bash
a=8
test(){
local a
echo $a
a=9
echo $a
}
echo $a
test
echo $a
返回值
return value
value不能超過255
myfunc() #函數(shù)定義
{
echo "This is my first shell function"
}
myfunc #函數(shù)調(diào)用
unset myfunc #取消函數(shù)
例:
readPass() {
PASS=""
echo -n "Entry Password: " //交互
stty -echo
read PASS
stty echo
echo
}
readPass
echo Password is $PASS

image.png
使用$1,$2傳參
#!/bin/bash
test(){
echo $1 $2
}
test 5 6
使用$*傳參
[root@wing shell]# cat a.sh
#!/bin/bash
a=(1 2 3 4 5)
hello(){
for i in $* #因?yàn)槭且粋€數(shù)組,不知道有多少個參數(shù),所以使用$*獲取所有參數(shù)
do
echo $[$i*2]
done
}
hello ${a[*]}