# for skill in Ada Coffe ACtion Java;do echo "I am good at ${skill}Script" done #定義變量時,=左右不能有空格。定義變量時沒有$,使用時必須有$ aa="http://www.w3school.cc" #readonly 表示只讀屬性。 readonly aa #aa="Http://www.baidu.com" # unset 變量刪除 unset aa echo $aa # 單引號,不支持變量和轉義。雙引號支持變量和轉義 k="Keytty" str1='111111111${k}' str2="111111111${k}" echo $str1 echo $str2 #拼接字符 your_name=$k greeting1="hello,"$your_name"!" greeting2="hello,"${your_name}"!" echo $greeting1 echo $greeting2 #獲取字符串長度 string="abc" echo ${#string} #提取字符串 string="runoob is a site" echo ${string:1:4} #查找子字符串。查找is或s的位置。輸出8 echo `expr index "$string" is` #定義數組 array_name=(value0 value1 value2 value3).用空格分開 array_name=(value0 value1 value2 value3) echo ${array_name[1]} #使用@ 獲取數組中所有元素 echo ${array_name[@]} #獲取數組長度 echo ${#array_name[@]} echo ${#array_name[*]} #獲取單個元素長度 echo ${#array_name[1]} #獲取參數爲$0,$1,$2,,,,其中$0 表示執行的文件名.:!sh a.sh China Hangzhou echo "Shell 傳遞參數實例:" echo "執行文件名:$0" echo "第一個參數:$1" echo "第二個參數:$2" echo "傳遞腳本的參數個數:"$# echo "傳遞腳本的參數:"$* #$*把參數看成"China Hangzhou",$@把參數看成"China""Hangzhou" echo "腳本運行當前的進程號:"$$ echo "後臺運行的最後一個進程號:"$! echo "傳遞腳本的參數:"$@ echo "顯示shell使用的當前選項"$- #打印 hB 什麼意思? echo "顯示最後命令的退出狀態:"$? #0 沒有錯誤,其他任何值表示有錯誤 # 演示 $* 和 $@ echo "-------------\$*-----------" # 這裏一定要加轉義,否則就輸出參數了 for i in "$*";do echo $i done echo "-------------\$@-----------" for i in "$@";do echo $i done #只支持一維數組,初始化不需要定義數組大小,由0開始 my_array=(A B "C" D) #my_array[4]="ChinaHangZhou" echo ${my_array[2]} echo ${my_array[3]} #chmod +x a.sh #expr表達式計算工具,完成表達式求值操作 val=`expr 2 + 2` #表達式和運算符之間要有空格,完整的表達式需要用``包括起來 echo "兩數之和爲:"$val #條件表達式必須放在方括號之間,如[ $a==$b ],括號與變量之間有空格 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 $a / $b` echo '$a / $b = '$val val=`expr $a % $b` echo '$a % $b = '$val if [ $a == $b ] #注意這裏要寫成$a == $b then echo '$a==$b' fi if [ $a != $b ] then echo '$a!=$b' fi #Mac中expr表達式爲$((表達式))乘號不需要轉義符號\ #關係運算符 #只支持數字,不支持字符串,除非字符串是數字 # -eq :check if equal, [ $a -eq $b ] # -ne :check if no equal, [ $a -ne $b ] # -gt :check if greater than, [ $a -gt $b ] # -lt :check if less than, [ $a -lt $b ] # -ge :check if greater than or equal , [ $a -ge $b ] # -le :check if less than or equal , [ $a -le $b ] # 布爾運算 # ! 非運算符 [ !false ] # -o 或運算符 [ $a -lt 20 -o $b -gt 100 ] # -a 與運算符 [ $a -lt 20 -a $b -gt 100 ] a=10 b=20 if [ $a != $b ] then echo "$a != $b, not equal!" else echo "$a == $b, equal!" fi if [ $a -lt 100 -a $b -gt 25 ] then echo "$a -lt 100 -a $b -gt 25: return true" else echo "$a -lt 100 -a $b -gt 25: return false" fi if [ $a -lt 100 -o $b -gt 25 ] then echo "$a -lt 100 -o $b -gt 25:return true" else echo "$a -lt 100 -o $b -gt 25:return false" fi #邏輯運算符 # && 邏輯AND [[ $a -lt 100 && $b -gt 100 ]] return false # || 邏輯OR [[ $a -lt 100 || $b -gt 100 ]] return true if [[ $a -lt 100 && $b -gt 100 ]] then echo "[[ $a -lt 100 && $b -gt 100 ]]:return true" else echo "[[ $a -lt 100 && $b -gt 100 ]]:return false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "[[ $a -lt 100 || $b -gt 100 ]]:return true" else echo "[[ $a -lt 100 || $b -gt 100 ]]:return false" fi # 字符串運算符 # a="abc" # b="efg" # = 檢查2個字符串是否相等,[ $a = $b ] false # != 檢查2個字符串是否不相等, [ $a != $b ] true # -z 檢查字符串長度是否爲0,爲0返回true,[ -z $a ] false # -n 檢查字符串長度是否爲0,不是0,返回true,[ -n $a ] true # str 檢查字符串是否爲空,不爲空返回true [ $a ]true a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : return true" else echo "$a = $b : return falsee" fi if [ -z $a ] then echo "-z $a : 字符串長度爲0,返回true" else echo "-z $a : 字符串長度不爲0,返回false" fi if [ $a ] then echo "$a :字符串不爲空" else echo "$a :字符串爲空" fi #文件測試運算符 # -b file :檢查文件是否塊設備文件,是則返回true [ -b $file ] # -c file :檢查文件是否字符設備文件,是則返回true # -d file :檢查文件是不是目錄,是則返回true # -f file :檢查文件是不是普通文件,是則返回true # -g file :檢查文件是不是設置了SGID位,是則返回true # -k file :檢查文件是否設置了粘着位(Sticky Bit),是則返回true # -p file :檢查文件是不是管道,是則返回true # -u file :檢查文件是不是設置了SUID位,是則返回true # -r file :檢查文件是不是可讀,是則返回true # -w file :檢查文件是不是可寫,是則返回true # -x file :檢查文件是不是可執行,是則返回true # -s file :檢查文件是不是爲空(文件大小是不是大於0),不空則返回true # -e file :檢查文件(包括目錄)是不是存在,是則返回true file=$0 if [ -r $file ] then echo "$file :can read" else echo "$file :cannot read" fi if [ -w $file ] then echo "$file:can write" else echo "$file :cannot write" fi if [ -s $file ] then echo "$file: length>0" else echo "$file:length=0" fi if [ -e $file ] then echo "$file:exists" else echo "$file:not exists" fi #echo 命令 #打印"需要加轉義字符 echo "打印字符\"是需要轉義字符\\的" #read 命令從標準輸入中讀取一行 echo "Please enter input:" #read name echo "You Enter \"$name\"" # -e 開啓轉義 echo -e "Ok,換行\n換行結束" echo -e "Ok,不換行\c" #顯示日期 echo `date` # for 循環 for var in item1 item2 itemN do echo $val done for loop in 1 2 3 4 5 do echo "The value is:$loop" done for str in "This is str1" "This is str2" do echo $str done # while int=1 while (( $int <= 5 )) #注意空格,注意這裏是2個(()) do echo "This is while,int=$int" let "int++" done #echo "Enter <Ctrl-D> to quit." #echo -n 'Enter your favorate film:' #while read film #do # echo "Yes,$film is a good film!" # echo "Enter <Ctrl-D> to quit." # echo -n 'Enter your favorate film:' #done # until 循環 , 一直執行,直到條件爲真時停止 myvar=1 until [ $myvar -gt 10 ] do echo "This is until,myvar=${myvar}" myvar=$(( $myvar + 1 )) done myvar=1 while [ $myvar -gt 10 ] # 一直執行,直到條件爲假時停止 do echo "This is while,myvar=${myvar}" myvar=$(( $myvar + = )) done # case for item in item1 item2 item3 do case $item in item1) #注意要使用 item1)括號 echo "This is case item1:$item" ;; #注意本條case命令序列完成後已;;結束 item2) echo "This is case item2:$item" ;; *) # *)表示默認命令序列 echo "This is default command" ;; esac # esac 是case模塊的結束標誌,是case反着寫 esac done # break 跳出循環 # continue 繼續循環 # shell 函數 function doFunc() { echo "This is my first Func!" } doFunc2(){ #參數是$1,$1,...$n ,當天n>10時,需要使用${10}來獲取參數 echo "The length of doFunc2 params is: "$# for param in $@ do echo $param done } echo "------------before call doFunc------------" doFunc #直接也函數名 echo "------------after call doFunc------------" echo "------------before call doFunc2------------" doFunc2 param1 param2 param3 # 傳參直接跟在後面 echo "------------after call doFunc2------------" # 輸入輸出重定向 # >file # <file # >> file 追加 # n >& m 將輸出文件m和n合併 # n <& m 將輸入文件m和n合併 # <<tag將開始標記tag和結束標記tag之間的內容作爲輸入 # 標準輸入文件:stdin的文件描述符爲0 # 標準輸出文件:stdout的文件描述符爲1 # 標準錯誤文件:stderr的文件描述符爲2 # stderr重定向到文件: command 2 >> file 追加的方式,>是覆蓋 # 將stdout和stderr合併到一個文件輸出:command >> file 2>&1 # Here Document 是Shell中一種特殊的重定向方式,用來將輸入重定向到一個交互式Shell腳本或程序 # command << delimiter # document # delimiter # 作用是:將2個delimiter之間的內容作爲輸入傳遞給command。 # delimiter一定要定格寫 wc -l << EOF Welcome to W3School ! www.w3school.cc EOF wc -l < $0 >> file 2>&1 # 將標準輸出和錯誤輸出重定向到file文件中 wc -l < $0 >> file2 2>&2 # 如果希望執行某個命令,但又不希望屏幕上顯示輸出結果,可以重定向到/dev/null # command > /dev/null # 寫入到/dev/null的內容都會被丟棄。如果嘗試從/dev/null中讀取內容會什麼也讀不到。將輸出重定向到/dev/null會起到“禁止輸出”的效效果 echo "演示:wc -l < $0 > /dev/null 2>&1 " wc -l < $0 > /dev/null 2>&1 #禁止輸出 #引用外部腳本.2種方式: . ./b.sh echo "b.sh的變量爲:$b_var" source ./c.sh echo "c.sh的變量爲:$c_var" #參考地址 http://www.runoob.com/linux/linux-shell.html
shell基礎
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.