1,在雙括號結構中,所有表達式可以像c語言一樣,如:a++,b--等,所有變量可以不加入:“$”符號前綴。雙括號結構 擴展了for,while,if條件測試運算
例子#((RANDOM%num_s))
for((j=1;j<=6;j++))
do
echo -n ${seqrand[j]}
done
2,將命令的值輸出
`file ..`(倒引號)
$(file ..)
eval file ..
#ftype=eval file $1
#ftype=`file $1`
#ftype=$(file $1)
3,shift $1;;#shift 是去除$1,把$2變成$1
4,cat << CLOUD將到下一個CLOUD的所有中間內容輸出到stdout
cat << CLOUD
</table>
</body>
</html>
CLOUD
5,sed和awk都可以實現替換
講文本轉換成html
sed -e 's/:/<\/td><td>/g' -e 's/^/<tr><td>/g' -e 's/$/<\/td><\/tr>/g' $1
awk 'BEGIN {FS=":";OFS="</td><td>"} gsub(/^/,"<tr><td>") gsub(/$/,"</td></tr>"){print $1,$2 }'
6, 測試:如果測試結果為真,則該命令的Exit Status為0,如果測試結果為假,則命令的Exit Status為1(注意與C語言的邏輯表示正好相反)。命令test或[的參數形式是相同的,只不過test命令不需要]參數。左方括號[確實是一個命令的名字,傳給命令的各參數之間應該用空格隔開,比如,$VAR、-gt、3、]是[命令的四個參數。
:是一個特殊的命令,稱為空命令,該命令不做任何事,但Exit Status總是真。
if以fi結尾
if [ -f /bin/bash ]
then echo "a file"
else echo "not a file"
fi
if :;then echo "always true"; fi
7,RANDOM在0--32767之間
8,echo什麼都不加可以輸出換行
9,#,@,*的含義:
•$# :代表後接的參數個數 ;num_s=${#s[@]},num_s為數組s的參數個數;echo ${#arr[3]} // 獲取字arr[3]的長度
•$@ :代表 "$1" "$2" "$3" "$4" 之意,每個變數是獨立的(用雙引號括起 來);•$* :代表『 "$1c$2c$3c$4" 』,其中 c 為分隔字元,預設為空白鍵, 所以 本例中代表 "$1 $2 $3 $4" 之意。
./123.sh one two three four
echo $0----./123.sh
echo $1----one
echo $2----two
echo $3----three
echo $#----4
echo $@----one two three four
echo $*----one two three four
10,數組
seq=(0 1 2 3 4 )
seq【0】為1
seq[1]=6賦值
echo ${seq[@]}0 6 2 3 4
echo ${seq[1]} 輸出6
for j in ${seqrand[@]}
do
echo -n $j
done
輸出0624
echo -n 去掉換行