script——不需要編譯的程序文件
可以在腳本中調(diào)用Linux命令。
獲取輸入
- 執(zhí)行腳本時(shí)用戶的輸入:$n,代表輸入中的第n個(gè)參數(shù)。
#!/bin/bash echo $1 echo $2 echo $3
執(zhí)行:$./me i love you
輸出:
i
love
you - 將前一個(gè)腳本的輸出作為該腳本的輸入
- 腳本函數(shù)的參數(shù)
變量定義
所有的變量都是字符串,可直接賦值,賦值語句中不能有空格。
引用變量時(shí):在變量前加$
符號(hào),并用雙引號(hào)包含以避免引用混淆。
#!/bin/bash
A=b
All=all
echo "$A"ll
echo $All
條件判斷
#!/bin/bash
if [ "$1" = "normal" ]
then
echo "this is normal case"
elif [ -z "$1" ]
then
echo "no input, ignal..."
fi
~if的[后必須有空格
while []...do... done語句
#!/bin/bash
echo "please use add or delete or exit"
ACTION="default"
while [ -n $ACTION ]
do
read ACTION
case $ACTION in
add)
echo "add somebody"
;;
delete)
echo "delete somebody"
;;
exit)
echo "complete"
break
;;
*)
echo "invalidate action, please re-enter"
;;
esac
done
for循環(huán)
Bash中的for循環(huán)類似于java中的foreach語句,一般與in聯(lián)合使用,用于才能夠某個(gè)集合中取出元素并對(duì)其進(jìn)行操作。
#!/bin/bash
for X in 1 2 3 4 5 hello
do
echo $X
done
~顯示in集合中的所有元素,in集合——in語句后緊跟的目標(biāo)集合。
#!/bin/bash
for X in ls
do
echo basename $X
echo dirname $X
done
uname
uname用于顯示操作系統(tǒng)的內(nèi)部名稱。
#!/bin/bash
#rename files without ext name to txt name
#author:Yuandan Kerr
for X in ls
do
Base="basename $X
"
if [ -z echo $Base | grep "\."
]
then
mv $Base $Base.txt
echo $Base
fi
done
函數(shù)
#!/bin/bash
stract()
{
OUT="$1"" ""$2"
return 0
}
stract2()
{
echo "$1"" ""$2"
return 3
}
A="bird"
B="mouse"
OUT=""
stract $A $B
echo $OUT
OUT2=`stract2 $A $B`
echo $?
echo $OUT2
定義函數(shù)的特點(diǎn):
- 不需要定義參數(shù),在函數(shù)實(shí)體中直接使用$n代表輸入的第n個(gè)參數(shù)。
- return返回的是函數(shù)執(zhí)行完畢的退出值,OUT賦值結(jié)果是函數(shù)體中
echo "$1"" ""$2"
輸出的結(jié)果。 -
OUT2='echo "$1"" ""$2"'
-> 調(diào)用函數(shù)時(shí),要想獲得函數(shù)的輸出,并且賦值給某個(gè)變量,則函數(shù)的執(zhí)行必須包含在``符號(hào)之間。 - $3 - > 獲得函數(shù)的返回值而不是輸出。
輸出結(jié)果:
bird mouse
3
bird mouse
常用內(nèi)置符號(hào)常量
-
$@
-> 代表全部參數(shù),test a b c -> "a","b","c"三個(gè)字符串 -
$*
-> 全部參數(shù),test a b c -> "a b c"一個(gè)字符串 -
$#
-> 參數(shù)的個(gè)數(shù) -
$?
-> 上一個(gè)命令的返回結(jié)果 -
$$
-> 當(dāng)前命令所在的進(jìn)程號(hào)(PID)