$#案例
[root@web01 /server/scripts]# cat network
if [ $# -eq 0 ]
then
? ? echo "Usage: $0 {start|stop|restart}"
fi
echo $1
[root@web01 /server/scripts]# set -- "I am" handsome oldboy.
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# echo $1
I am
[root@web01 /server/scripts]# echo $2
handsome
[root@web01 /server/scripts]# echo $3
oldboy.
[root@web01 /server/scripts]# echo $#
3
[root@web01 /server/scripts]# echo $*
I am handsome oldboy.
[root@web01 /server/scripts]# echo $@
I am handsome oldboy.
[root@web01 /server/scripts]# for i in "$*";do echo $i;done
I am handsome oldboy.
[root@web01 /server/scripts]# for i in "$@";do echo $i;done
I am
handsome
oldboy.
$$
[root@web01 /server/scripts]# cat oldboy.sh
echo $0
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} $13 $14 $15
echo $#
echo $*
echo $@
echo $$|tee /tmp/a.log
sleep 30
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# cat kill.sh
kill `cat /tmp/a.log`
${parameter} 返回變量$parameter的內(nèi)容
${#parameter} 返回變量$parameter內(nèi)容的長度(按字符)牵啦,也適合特殊變量*
${parameter:offset} 在變量${parameter}中蔚出,從位置offset之后開始提取子串到結(jié)尾
${parameter:offset:length} 在變量${parameter}中,從位置offset之后開始提取長度為length的子串
#刪除
${parameter#word} 從變量${parameter}【開頭】開始刪除最【短】匹配的word子串
${parameter##word} 從變量${parameter}【開頭】開始刪除最【長】匹配的word子串
${parameter%word} 從變量${parameter}結(jié)尾開始刪除最短匹配的word子串
${parameter%%word} 從變量${parameter}結(jié)尾開始刪除最長匹配的word子串
#類似sed替換
${parameter/pattern/string} ? ? 使用string代替第一個匹配的pattern
${parameter//pattern/string} 使用string代替所有匹配的pattern
[root@web01 /server/scripts]# OLDBOY="I am oldboy"
[root@web01 /server/scripts]# echo $OLDBOY
I am oldboy
[root@web01 /server/scripts]# echo ${#OLDBOY} #打印變量內(nèi)容的長度棋恼。
11
[root@web01 /server/scripts]# echo ${OLDBOY:2:2}
am
[root@web01 /server/scripts]# echo ${OLDBOY:2}
am oldboy
[root@web01 /server/scripts]# echo ${OLDBOY:0:2}
I
[root@web01 /server/scripts]# echo ${OLDBOY:0:3}
I a
[root@web01 /server/scripts]# echo ${OLDBOY}
I am oldboy
[root@web01 /server/scripts]# echo ${OLDBOY}|grep -o oldboy
oldboy
[root@web01 /server/scripts]# echo ${OLDBOY:2:2}
am
[root@web01 /server/scripts]# echo ${OLDBOY:5:6}
oldboy
[root@web01 /server/scripts]# echo ${OLDBOY:5}
oldboy
獲取變量內(nèi)容長度的方法:
[root@web01 /server/scripts]# echo $OLDBOY|wc -L
22
[root@web01 /server/scripts]# echo ${#OLDBOY}
22
[root@web01 /server/scripts]# expr length "$OLDBOY"
22
[root@web01 /server/scripts]# echo $OLDBOY|awk '{print length}'
22
[root@web01 /server/scripts]# echo $OLDBOY|awk '{print length($0)}'
22
[root@web01 /server/scripts]# sh count.sh
I
am
linux
to
our
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# cat count.sh
chars="I am oldboy linux welcome to our training."
for word in $chars
do
? if [ ${#word} -lt 6 ]
? then
? ? ? echo $word
? fi
done
做銷售的男生或女生湘纵,經(jīng)常出差脂崔。
樂樂在家
result是樂樂的女朋友
樂樂出差了,第三者插足了梧喷。unset
[root@web01 /server/scripts]# test=lele
[root@web01 /server/scripts]# echo $test
lele
[root@web01 /server/scripts]# result=${test:-unset}
[root@web01 /server/scripts]# echo $result
lele
[root@web01 /server/scripts]# unset test
[root@web01 /server/scripts]# echo $test
[root@web01 /server/scripts]# result=${test:-unset}
[root@web01 /server/scripts]# echo $result
unset
數(shù)值運算:
1)整數(shù)運算:
方法1:
[root@web01 /server/scripts]# a=1
[root@web01 /server/scripts]# let a=a+1
[root@web01 /server/scripts]# echo $a
2
方法2:推薦小括號
[root@web01 /server/scripts]# a=10
[root@web01 /server/scripts]# ((a=a+1))
[root@web01 /server/scripts]# echo $a
11
方法3:盡量不用做運算
[root@web01 /server/scripts]# a=10
[root@web01 /server/scripts]# expr $a + 111
121
[root@web01 /server/scripts]# b=`expr $a + 111`
[root@web01 /server/scripts]# echo $b
121
方法4:
[root@web01 /server/scripts]# a=11
[root@web01 /server/scripts]# echo $[$a+11]
22
[root@web01 /server/scripts]# echo $[a+11]
22
[root@web01 /server/scripts]# c="$[a+11]"
[root@web01 /server/scripts]# echo $c
22
方法5:
[root@web01 /server/scripts]# a=8
[root@web01 /server/scripts]# declare -i a=a+10
[root@web01 /server/scripts]# echo $a
18
整數(shù)或者小數(shù)運算:
bc
[root@web01 /server/scripts]# echo 1+2|bc
3
[root@web01 /server/scripts]# echo 1.1*2|bc
2.2
[root@web01 /server/scripts]# echo 3/2|bc
1
[root@web01 /server/scripts]# echo 3%2|bc
1
[root@web01 /server/scripts]# echo 3.33*9.99|bc
33.26
[root@web01 /server/scripts]# echo "scale=4;3.33*9.99"|bc
33.2667
[root@web01 /server/scripts]# echo 3^2|bc
9
awk
[root@web01 ~]# echo 1.1 2|awk '{print $1*$2}'
2.2
[root@web01 ~]# echo 1.1 2|awk '{print $1%$2}'
1.1
[root@web01 ~]# echo 4 2|awk '{print $1%$2}'
0
(()) 邏輯判斷
[root@web01 /server/scripts]# a=10
[root@web01 /server/scripts]# ((a++))
[root@web01 /server/scripts]# echo $a
11
[root@web01 /server/scripts]# ((a++))
[root@web01 /server/scripts]# echo $a
12
[root@web01 /server/scripts]# ((a--))
[root@web01 /server/scripts]# echo $a
11
[root@web01 /server/scripts]# ((a--))
[root@web01 /server/scripts]# echo $a
10
[root@web01 /server/scripts]# ((--a))
[root@web01 /server/scripts]# echo $a
9
[root@web01 /server/scripts]# ((--a))
[root@web01 /server/scripts]# echo $a
8
[root@web01 /server/scripts]# ((--a))
[root@web01 /server/scripts]# echo $a
7
[root@web01 /server/scripts]# echo $a
7
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# echo $((--a))
6
[root@web01 /server/scripts]# echo $a
6
[root@web01 /server/scripts]# echo $((--a))
5
[root@web01 /server/scripts]# echo $a
5
[root@web01 /server/scripts]# echo $((--a))
4
[root@web01 /server/scripts]# echo $a
4
[root@web01 /server/scripts]# echo $((a--))
4
[root@web01 /server/scripts]# echo $a
3
[root@web01 /server/scripts]# echo $((a--))
3
[root@web01 /server/scripts]# echo $a
2
[root@web01 /server/scripts]# ((8>7))
[root@web01 /server/scripts]# echo $?
0
[root@web01 /server/scripts]# ((8<7))
[root@web01 /server/scripts]# echo $?
1
[root@web01 /server/scripts]# ((8<7&&6>5))
[root@web01 /server/scripts]# echo $?
1
[root@web01 /server/scripts]# ((8<9&&6>5))
[root@web01 /server/scripts]# echo $?
0
[root@web01 /server/scripts]# ((8<7||6>5))
[root@web01 /server/scripts]# echo $?
0
expr功能:
1)計算
[root@web01 /server/scripts]# expr 10 + 10
20
2)獲取字符串長度
[root@web01 /server/scripts]# a="oldgirl"
[root@web01 /server/scripts]# echo $a
oldgirl
[root@web01 /server/scripts]# expr length "$a"
7
3)判斷字符串是否為整數(shù)數(shù)字或字符
[root@web01 /server/scripts]# a=1
[root@web01 /server/scripts]# expr $a + 1 &>/dev/null
[root@web01 /server/scripts]# echo $?
0
[root@web01 /server/scripts]# a=oldboy
[root@web01 /server/scripts]# expr $a + 1 &>/dev/null
[root@web01 /server/scripts]# echo $?
2
4)用來判斷文件擴展名是否符合指定擴展名
[root@web01 /server/scripts]# cat judge.sh
? if expr "$1" : ".*\.avi$" >/dev/null ; then
? ? echo "好興奮啊"
? else
? ? echo "好失望啊"
? fi
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# sh judge.sh oldboy.avi
好興奮啊
[root@web01 /server/scripts]# sh judge.sh oldboy.log
好失望啊
[root@web01 ~]# read -p "請輸入一個數(shù)字:" n
請輸入一個數(shù)字:100
[root@web01 ~]# echo $n
100
[root@web01 ~]# read -t 10 -p "請輸入兩個數(shù)字:" n m
請輸入兩個數(shù)字:100 110
[root@web01 ~]# echo $n
100
[root@web01 ~]# echo $m
110
read讀入的本質(zhì)就是給變量賦值砌左,多了交互式提示而已。
變量賦值的三種方式:
1)定義式
a=1
2)read讀入式
read -t 10 -p "請輸入兩個數(shù)字:" n m
n=110 m=100
3)腳本傳參
$1=100
練習(xí):
01-dingyi.sh
a=6
b=2
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
變通:02-read.sh
改成read讀入兩個數(shù)
變通2:03-chuancan.sh
改成命令行傳入兩個數(shù)
[root@web01 /server/scripts]# cat 02-read.sh
read -p "請輸入兩個整數(shù):" a b
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
[root@web01 /server/scripts]# cat 03-chuancan.sh
a=$1
b=$2
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
[root@web01 /server/scripts]# test -f a && echo ddd >a ||echo 0
0
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# cat a
cat: a: 沒有那個文件或目錄
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# touch a
[root@web01 /server/scripts]# test -f a && echo ddd >a ||echo 0
[root@web01 /server/scripts]# cat a
ddd
[root@web01 /server/scripts]# test -x count.sh && ./count.sh ||echo "沒有執(zhí)行權(quán)限"
沒有執(zhí)行權(quán)限
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# ls count.sh
count.sh
[root@web01 /server/scripts]# ls count.sh? -l
-rw-r--r-- 1 root root 131 5月? 28 10:36 count.sh
[root@web01 /server/scripts]# chmod +x count.sh
[root@web01 /server/scripts]# ls count.sh? -l
-rwxr-xr-x 1 root root 131 5月? 28 10:36 count.sh
[root@web01 /server/scripts]# test -x count.sh && ./count.sh ||echo "沒有執(zhí)行權(quán)限"
I
am
linux
to
our
[root@web01 /server/scripts]# [ -x count.sh ] && ./count.sh ||echo "沒有執(zhí) 行權(quán)限"
I
am
linux
to
our
[root@web01 /server/scripts]# [[ -x count.sh ]] && ./count.sh ||echo "沒有 執(zhí)行權(quán)限"
I
am
linux
to
our
文件測試表達式用法:對文件的屬性進行判斷铺敌,然后根據(jù)結(jié)果進行處理
[root@web01 /server/scripts]# touch oldboy.txt
[root@web01 /server/scripts]# [ -f oldboy.txt ] && echo 1 || echo 0
1
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# rm -f oldboy.txt
[root@web01 /server/scripts]# [ -f oldboy.txt ] && echo 1 || echo 0
0
[root@web01 /server/scripts]# mkdir oldboy
[root@web01 /server/scripts]# [ -f oldboy ] && echo 1 || echo 0
0
[root@web01 /server/scripts]# [ -e oldboy ] && echo 1 || echo 0
1
[root@web01 /server/scripts]# [ -d oldboy ] && echo 1 || echo 0
1
[root@web01 /server/scripts]# [ -L oldboy ] && echo 1 || echo 0
0
[ 條件1 ] && {
? ? 命令1? ?
命令2? ?
命令3
}
如果條件成立汇歹,那么執(zhí)行三個命令。
if [ 條件1 ]?
then? ?
命令1? ?
命令2? ?
命令3
fi
[ 條件1 ] || {
? ? 命令1? ?
命令2? ?
命令3
}
如果表達式不成立偿凭,那么執(zhí)行三個命令产弹。
[ -L oldboy ] && echo 1 || echo 0
[ 條件1 ] && {
? ? 命令1? ?
命令2? ?
} || {
命令3
}
如果條件成立,那么執(zhí)行命令1命令2弯囊,否則執(zhí)行命令3痰哨。
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 6
# if the ip configuration utility isn't around we can't function.
[ -x /sbin/ip ] || exit 1
字符串測試表達式
[root@web01 /server/scripts]# [ -n "oldboy" ] && echo 1 || echo 0
1
[root@web01 /server/scripts]# [ -z "oldboy" ] && echo 1 || echo 0
0
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# a="oldboy"
[root@web01 /server/scripts]# [ -z "$a" ] && echo 1 || echo 0
0
[root@web01 /server/scripts]# unset a
[root@web01 /server/scripts]# echo $a
[root@web01 /server/scripts]# [ -z "$a" ] && echo 1 || echo 0
1
[root@web01 /server/scripts]# [ "$a" = "oldboy" ] && echo 1 || echo 0
0
[root@web01 /server/scripts]# a="oldboy"
[root@web01 /server/scripts]# [ "$a" = "oldboy" ] && echo 1 || echo 0
1
[root@web01 /server/scripts]# [ "$a" = "oldgir" ] && echo 1 || echo 0
0
[root@web01 /server/scripts]# b="oldgirl"
[root@web01 /server/scripts]# [ "${#a}" = "${#b}" ] && echo 1 || echo 0
0
[root@web01 /server/scripts]# b="oldgir"
[root@web01 /server/scripts]# [ "${#a}" = "${#b}" ] && echo 1 || echo 0
1
[root@web01 /server/scripts]# sh 02-read.sh
作業(yè):
[root@web01 /server/scripts]# cat 02-read.sh
read -p "請輸入兩個整數(shù):" a b
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
[root@web01 /server/scripts]# cat 03-chuancan.sh
a=$1
b=$2
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
對傳入的參數(shù)或者read讀入的變量內(nèi)容判斷,如果不符合計算條件匾嘱,提示用戶斤斧,并退出。
[root@web01 /server/scripts]# sh 02-read.sh
請輸入兩個整數(shù):
02-read.sh:行2: -: 語法錯誤: 期待操作數(shù) (錯誤符號是 "-")
[root@web01 /server/scripts]# read -p "請輸入一個數(shù):" n
請輸入一個數(shù):oldboy
[root@web01 /server/scripts]# [ -z "$n" ] &&echo "沒有任何輸入"||echo "$n"
oldboy
[root@web01 /server/scripts]# read -p "請輸入一個數(shù):" n
請輸入一個數(shù):
[root@web01 /server/scripts]# [ -z "$n" ] &&echo "沒有任何輸入"||echo "$n"
沒有任何輸入
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]#
[root@web01 /server/scripts]# read -p "請輸入一個數(shù):" n
請輸入一個數(shù):oldboy
[root@web01 /server/scripts]# expr $n + 100 &>/dev/null
[root@web01 /server/scripts]# echo $?
2
[root@web01 /server/scripts]# read -p "請輸入一個數(shù):" n
請輸入一個數(shù):110
[root@web01 /server/scripts]# expr $n + 100 &>/dev/null
[root@web01 /server/scripts]# echo $?
0
[ 條件1 ] && {
? ? 命令1? ?
命令2? ?
命令3
}
如果條件成立霎烙,那么執(zhí)行三個命令折欠。
if [ 條件1 ]?
then? ?
命令1? ?
命令2? ?
命令3
fi
[ 條件1 ] || {
? ? 命令1? ?
命令2? ?
命令3
}
如果表達式不成立,那么執(zhí)行三個命令吼过。
[ -L oldboy ] && echo 1 || echo 0
[ 條件1 ] && {
? ? 命令1? ?
命令2? ?
} || {
命令3
}
如果條件成立锐秦,那么執(zhí)行命令1命令2,否則執(zhí)行命令3盗忱。
[root@web01 /server/scripts]# cat 02-read.sh
read -p "請輸入兩個整數(shù):" a b
expr $a + $b + 999 &>/dev/null
[ $? -ne 0 ]&&{
? echo "其中有一個輸入不是數(shù)字."
? exit 1
}
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"