1.Shell變量
# 變量的聲明
name="zhangsan"
for file in `ls /etc`
或
for file in $(ls /etc)
# 變量的調(diào)用
echo $name
echo ${name}
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
# 只讀變量 /bin/sh: NAME: This variable is read only.
url="https://www.google.com"
readonly url
url="https://www.runoob.com"
# 刪除變量
unset name
2.Shell字符串
# 聲明字符串
str1="hello world 1"
str2='hello world 2'
# 字符串拼接--雙引號
name='sunwukong'
name1="hello, "$name" !"
name2="hello, ${name} !"
# 字符串拼接--單引號
passwd='123456'
passwd1='hello, '$passwd' !'
passwd2='hello, ${passwd} !'
echo $passwd2 # hello, ${passwd} !
# 字符串的長度
email="123456@qq.com"
echo ${#email}
echo ${email:1:4}
3.Shell數(shù)組
# 定義數(shù)組 括號來表示數(shù)組,數(shù)組元素用"空格"符號分割開
數(shù)組名=(值1 值2 ... 值n)
favs=("足球" "藍球" "乒乓球球" "保齡球")
# 讀取數(shù)組 ${數(shù)組名[下標]}
fav=${favs[1]}
# 使用 @ 符號可以獲取數(shù)組中的所有元素
echo ${favs[@]}
# 獲取數(shù)組的長度
length1=${#favs[@]}
length2=${#favs[*]}
4.Shell注釋
#--------------------------------------------
# 這是一個注釋
# author:
# site:
#--------------------------------------------
##### 服務(wù)器配置-start #####
#
#
#
#
#
########## 服務(wù)器配置-end #####
# 特殊的多行注釋
:<<EOF
注釋內(nèi)容...
注釋內(nèi)容...
注釋內(nèi)容...
EOF
:<<!
注釋內(nèi)容...
注釋內(nèi)容...
注釋內(nèi)容...
!
5.Shell參數(shù)傳遞
參數(shù)處理 |
參數(shù)說明 |
$# |
傳遞到腳本的參數(shù)個數(shù) |
$* |
以一個單字符串顯示所有向腳本傳遞的參數(shù) |
$$ |
腳本運行的當前進程ID號 |
$! |
后臺運行的最后一個進程的ID號 |
$? |
顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤 |
$0 |
執(zhí)行的文件名 |
5.Shell運算符
---------------------算數(shù)運算符------------------------
#!/bin/bash
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
---------------------關(guān)系運算符------------------------
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大于 b"
else
echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小于 b"
else
echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大于或等于 b"
else
echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小于或等于 b"
else
echo "$a -le $b: a 大于 b"
fi
---------------------布爾運算符------------------------
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
---------------------邏輯運算符------------------------
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
---------------------字符串運算符------------------------
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a 等于 b"
else
echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
echo "-z $a : 字符串長度為 0"
else
echo "-z $a : 字符串長度不為 0"
fi
if [ -n "$a" ]
then
echo "-n $a : 字符串長度不為 0"
else
echo "-n $a : 字符串長度為 0"
fi
if [ $a ]
then
echo "$a : 字符串不為空"
else
echo "$a : 字符串為空"
fi
---------------------文件測試運算符------------------------
file="/var/node/test.sh"
if [ -r $file ]
then
echo "文件可讀"
else
echo "文件不可讀"
fi
if [ -w $file ]
then
echo "文件可寫"
else
echo "文件不可寫"
fi
if [ -x $file ]
then
echo "文件可執(zhí)行"
else
echo "文件不可執(zhí)行"
fi
if [ -f $file ]
then
echo "文件為普通文件"
else
echo "文件為特殊文件"
fi
if [ -d $file ]
then
echo "文件是個目錄"
else
echo "文件不是個目錄"
fi
if [ -s $file ]
then
echo "文件不為空"
else
echo "文件為空" fi
---------------------test命令------------------------
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '兩個數(shù)相等!'
else
echo '兩個數(shù)不相等!'
fi
6.Shell流程控制
---------------------if------------------------
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "沒有符合的條件"
fi
---------------------case------------------------
echo '輸入 1 到 4 之間的數(shù)字:'
echo '你輸入的數(shù)字為:'
read num
case $num in
1) echo '你選擇了 1'
;;
2) echo '你選擇了 2'
;;
3) echo '你選擇了 3'
;;
4) echo '你選擇了 4'
;;
*) echo '你沒有輸入 1 到 4 之間的數(shù)字'
;;
esac
---------------------for------------------------
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
for str in 'This is a string','hello moto'
do
echo $str
done
---------------------while------------------------
#有限循環(huán)
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
# 無限循環(huán)
while true
do
command
done
---------------------break------------------------
while :
do
echo -n "輸入 1 到 5 之間的數(shù)字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數(shù)字為 $aNum!"
;;
*) echo "你輸入的數(shù)字不是 1 到 5 之間的! 游戲結(jié)束"
break
;;
esac
done
---------------------continue------------------------
while :
do
echo -n "輸入 1 到 5 之間的數(shù)字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數(shù)字為 $aNum!"
;;
*) echo "你輸入的數(shù)字不是 1 到 5 之間的! 游戲結(jié)束"
continue
echo "游戲結(jié)束"
;;
esac
done
7.Shell函數(shù)
#!/bin/bash
## 第一個函數(shù)------------------------------
demoFun(){
echo "這是我的第一個 shell 函數(shù)!"
}
echo "-----函數(shù)開始執(zhí)行-----"
demoFun
echo "-----函數(shù)執(zhí)行完畢-----"
## 函數(shù)返回值------------------------------
funWithReturn(){
echo "這個函數(shù)會對輸入的兩個數(shù)字進行相加運算..."
echo "輸入第一個數(shù)字: "
read aNum
echo "輸入第二個數(shù)字: "
read anotherNum
echo "兩個數(shù)字分別為 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
# 函數(shù)返回值在調(diào)用該函數(shù)后通過 $? 來獲得。
echo "輸入的兩個數(shù)字之和為 $? !"
## 函數(shù)參數(shù)------------------------------
funWithParam(){
echo "第一個參數(shù)為 $1 !"
echo "第二個參數(shù)為 $2 !"
echo "第十個參數(shù)為 $10 !"
echo "第十個參數(shù)為 ${10} !"
echo "第十一個參數(shù)為 ${11} !"
echo "參數(shù)總數(shù)有 $# 個!"
echo "作為一個字符串輸出所有參數(shù) $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9