shell腳本語(yǔ)言
#等號(hào)和變量之間,等號(hào)和值之間不能有空格
echo '百度'
youName='小白'
echo $youName
#打印當(dāng)前目錄文件
for file in `ls`; do
# echo "I am good at ${file}Script"
echo "當(dāng)前文件 ${file} aa"
done
for loop in 1 2 3 4 5; do
echo "The value is: $loop"
done
youName="我是對(duì)的"
echo $youName
#-e 使換行生效
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str #-e 開(kāi)啟轉(zhuǎn)義
#獲取字符串的長(zhǎng)度
echo '字符串的長(zhǎng)度:'${#your_name}
#字符串截取 第一個(gè)參數(shù)是從那個(gè)位置開(kāi)始截取,后一個(gè)參數(shù)是截取幾位
echo '截取字符串從第0位開(kāi)始,截2位是:'${your_name:0:2}
#數(shù)組
arry_name=("小明" "小bai" "小hua")
for name in ${arry_name[@]}; do
echo $name
done
echo 'arry_name數(shù)組的長(zhǎng)度為'${#arry_name[@]}
echo '獲取數(shù)組中所有元素:'${arry_name[@]}
echo '獲取數(shù)組的第一個(gè):'${arry_name[0]}
arry_name[0]="我是笑話"
echo '改變數(shù)組后的第一個(gè):'${arry_name[0]}
#傳參
echo "執(zhí)行的文件名:$0"
echo "第一個(gè)參數(shù)為:$1"
echo "參數(shù)個(gè)數(shù)為:$#"
echo "傳遞的參數(shù)作為一個(gè)字符串顯示:$*"
echo "腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào):$$"
if [ -n "$1" ]; then
echo "包含第一個(gè)參數(shù)"
else
echo "沒(méi)有包含第一參數(shù)"
fi
#運(yùn)算符 表達(dá)式和運(yùn)算符之間要有空格
#-eq 檢測(cè)兩個(gè)數(shù)是否相等躲胳,相等返回 true迎吵。 [ $a -eq $b ] 返回 false端姚。
#-ne 檢測(cè)兩個(gè)數(shù)是否不相等,不相等返回 true艇潭。 [ $a -ne $b ] 返回 true。
#-gt 檢測(cè)左邊的數(shù)是否大于右邊的祠饺,如果是伍俘,則返回 true。 [ $a -gt $b ] 返回 false蚣抗。
#-lt 檢測(cè)左邊的數(shù)是否小于右邊的侈百,如果是,則返回 true翰铡。 [ $a -lt $b ] 返回 true钝域。
#-ge 檢測(cè)左邊的數(shù)是否大于等于右邊的,如果是锭魔,則返回 true例证。 [ $a -ge $b ] 返回 false。
#-le 檢測(cè)左邊的數(shù)是否小于等于右邊的迷捧,如果是织咧,則返回 true。 [ $a -le $b ] 返回 true漠秋。
val=`expr 2 + 2`
result=$[2 + 2]
echo "2個(gè)數(shù)之和:$result"
echo "2個(gè)數(shù)之和:$val"
if [ 2 == 2 ]
then
echo "2 等于 2"
fi
if [ 2 != 3 ]
then
echo "2 不等于 3"
fi
#! 非運(yùn)算笙蒙,表達(dá)式為 true 則返回 false,否則返回 true庆锦。 [ ! false ] 返回 true捅位。
#-o 或運(yùn)算,有一個(gè)表達(dá)式為 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true绿渣。
#-a 與運(yùn)算朝群,兩個(gè)表達(dá)式都為 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false中符。
if [ 90 -lt 100 -a 100 -gt 15 ]
then
echo "90 小于 100 且 100 大于 15 : 返回 true"
else
echo "90 小于 100 且 100 大于 15 : 返回 false"
fi
if [ 20 -lt 100 -o 10 -gt 100 ]
then
echo "20 小于 100 或 10 大于 100 : 返回 true"
else
echo "20 小于 100 或 10 大于 100 : 返回 false"
fi
#&& 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
#|| 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
a=10
b=20
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
#字符串運(yùn)算符
#運(yùn)算符 說(shuō)明 舉例
#= 檢測(cè)兩個(gè)字符串是否相等姜胖,相等返回 true。 [ $a = $b ] 返回 false淀散。
#!= 檢測(cè)兩個(gè)字符串是否相等右莱,不相等返回 true。 [ $a != $b ] 返回 true档插。
#-z 檢測(cè)字符串長(zhǎng)度是否為0慢蜓,為0返回 true。 [ -z $a ] 返回 false郭膛。
#-n 檢測(cè)字符串長(zhǎng)度是否為0晨抡,不為0返回 true。 [ -n "$a" ] 返回 true则剃。
#$ 檢測(cè)字符串是否為空耘柱,不為空返回 true。 [ $a ] 返回 true棍现。
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 : 字符串長(zhǎng)度為 0"
else
echo "-z $a : 字符串長(zhǎng)度不為 0"
fi
if [ -n "$a" ]
then
echo "-n $a : 字符串長(zhǎng)度不為 0"
else
echo "-n $a : 字符串長(zhǎng)度為 0"
fi
if [ $a ]
then
echo "$a : 字符串不為空"
else
echo "$a : 字符串為空"
fi
#文件操作
#-b file 檢測(cè)文件是否是塊設(shè)備文件调煎,如果是,則返回 true己肮。 [ -b $file ] 返回 false士袄。
#-c file 檢測(cè)文件是否是字符設(shè)備文件,如果是谎僻,則返回 true娄柳。 [ -c $file ] 返回 false。
#-d file 檢測(cè)文件是否是目錄艘绍,如果是西土,則返回 true。 [ -d $file ] 返回 false鞍盗。
#-f file 檢測(cè)文件是否是普通文件(既不是目錄需了,也不是設(shè)備文件),如果是般甲,則返回 true肋乍。 [ -f $file ] 返回 true。
#-g file 檢測(cè)文件是否設(shè)置了 SGID 位敷存,如果是墓造,則返回 true堪伍。 [ -g $file ] 返回 false。
#-k file 檢測(cè)文件是否設(shè)置了粘著位(Sticky Bit)觅闽,如果是帝雇,則返回 true。 [ -k $file ] 返回 false蛉拙。
#-p file 檢測(cè)文件是否是有名管道尸闸,如果是,則返回 true孕锄。 [ -p $file ] 返回 false吮廉。
#-u file 檢測(cè)文件是否設(shè)置了 SUID 位,如果是畸肆,則返回 true宦芦。 [ -u $file ] 返回 false。
#-r file 檢測(cè)文件是否可讀轴脐,如果是调卑,則返回 true。 [ -r $file ] 返回 true大咱。
#-w file 檢測(cè)文件是否可寫(xiě)恬涧,如果是,則返回 true徽级。 [ -w $file ] 返回 true气破。
#-x file 檢測(cè)文件是否可執(zhí)行聊浅,如果是餐抢,則返回 true。 [ -x $file ] 返回 true低匙。
#-s file 檢測(cè)文件是否為空(文件大小是否大于0)旷痕,不為空返回 true。 [ -s $file ] 返回 true顽冶。
#-e file 檢測(cè)文件(包括目錄)是否存在欺抗,如果是,則返回 true强重。 [ -e $file ] 返回 true绞呈。
file="/Users/xhl/Deskto/test.sh"
if [ -r $file ]
then
echo "文件可讀"
else
echo "文件不可讀"
fi
#echo '今天的日期'`date` >test.txt #輸入到test.txt文件中
printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 楊過(guò) 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
printf "%d %s\n" 1 "abc"
#-e 文件名 如果文件存在則為真
#-r 文件名 如果文件存在且可讀則為真
#-w 文件名 如果文件存在且可寫(xiě)則為真
#-x 文件名 如果文件存在且可執(zhí)行則為真
#-s 文件名 如果文件存在且至少有一個(gè)字符則為真
#-d 文件名 如果文件存在且為目錄則為真
#-f 文件名 如果文件存在且為普通文件則為真
#-c 文件名 如果文件存在且為字符型特殊文件則為真
#-b 文件名 如果文件存在且為塊特殊文件則為真
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
##輸入數(shù)據(jù)
#echo '按下 <CTRL-D> 退出'
#echo -n '輸入你最喜歡的網(wǎng)站名: '
#while read FILM
#do
#echo "是的!$FILM 是一個(gè)好網(wǎng)站"
#done
for((i=1;i<=5;i++));do
echo "這是第 $i 次調(diào)用";
done;
demoFun(){
echo "這是我的第一個(gè) shell 函數(shù)!"
}
demoFun
#command > file 將輸出重定向到 file间景。
#command < file 將輸入重定向到 file佃声。
#command >> file 將輸出以追加的方式重定向到 file。
#n > file 將文件描述符為 n 的文件重定向到 file倘要。
#n >> file 將文件描述符為 n 的文件以追加的方式重定向到 file圾亏。
#n >& m 將輸出文件 m 和 n 合并。
#n <& m 將輸入文件 m 和 n 合并。
#<< tag 將開(kāi)始標(biāo)記 tag 和結(jié)束標(biāo)記 tag 之間的內(nèi)容作為輸入志鹃。