Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          一、用戶定義的變量
          ?
          1、變量名
          ?
          ??? 以字母、下劃線開頭的字母、數(shù)字和下劃線字符序列
          ??? 注:大小寫敏感
          ?
          2、變量賦值
          ?
          ??? 變量名=字符串
          ??? 注:等號兩邊不能有空格
          ?
          3、引用變量值
          ?
          ??? 在變量名前加“$”表示引用,例如:
          ??? $?dir=/usr/wxq
          ??? $ echo $dir? --/usr/wxq
          ??? $ echo dir? --dir
          ?
          ??? 注意:
          ??? ① abc= 或未明確賦值過的變量,均為空字符串
          ??? ② 如果字符串中有空格,則用""括起來:names="Wang XQ"
          ??? ③ 可以作為某長字符串的一部分,例如:echo read$s
          ??? ④ 若會引起歧義時,用{}括起變量,如:cat ${dir}qc/m
          ?
          4、命令替換
          ?
          ??? 使用倒引號“`”進(jìn)行命令替換,如:
          ??? $ dir=`pwd`
          ?
          ??? 或者使用$()的形式
          ??? $ dir=$(pwd)
          ??? $ echo $(pwd; cd /opt; ls -l)
          ?
          ?
          ?
          二、數(shù)組
          ?
          1、定義數(shù)組
          ?
          ??? bash只提供一維數(shù)組,且不限制數(shù)組大小。
          ??? 數(shù)據(jù)下標(biāo)從0開始賦值,格式為:數(shù)組名[下標(biāo)]=值
          ?
          ??? $ city[0]=Beijing
          ??? $ city[1]=Shanghai
          ??? ...
          ?
          ??? 也可以組合賦值
          ??? $ A=(this is an example of shell script)
          ?
          2、數(shù)組的讀取
          ?
          ??? ${數(shù)組名[下標(biāo)]},例如上例中:
          ?
          ??? $ echo ${A[0]} ${A[2]}? --this an
          ??? $ echo ${A[8]}? --空值,超過上限
          ?
          ??? 注:可以使用*或@作為下標(biāo),表示所有元素,例如:
          ??? $ echo ${A[*]}
          ?
          ??? 當(dāng)不加下標(biāo)讀取時,默認(rèn)返回A[0]
          ?
          3、取消數(shù)組
          ?
          ??? $ unset A? --取消整個數(shù)據(jù)
          ??? $ unset A[0]? --取消第一個值
          ?
          ?
          ?
          三、變量引用
          ?
          ??? ① $name:表示變量name的值,若未定義變量則返回空值
          ?
          ??? ② ${name}:與$name相同,只是為了與后面緊接的字符分開
          ?
          ??? ③ ${name[n]}:表示引用數(shù)組name中的第n個元素
          ?
          ??? ④ ${name[*]} | ${name[@]}:表示引用數(shù)據(jù)的所有元素
          ?
          ??? ${name[*]}和${name[@]}的區(qū)別:
          ????? $ person=("a b" "c d")
          ????? $ echo ${person[*]}
          ????? a b c d
          ????? $ echo ${person[@]}
          ????? a b c d
          ? ???? $ for i in ${person[*]}; do echo $i; done
          ?
          ???? a
          ???? ?b
          ???? ?c
          ???? ?d
          ?
          ???? $ for i in ${person[@]}; do echo $i; done
          ?
          ???? a
          ???? ?b
          ???? ?c
          ???? ?d

          ??????$ for i in "${person[*]}"; do echo $i; done
          ????? a b c d
          ??????$ for i in "${person[@]}"; do echo $i; done
          ????? a b
          ????? c d
          ?
          ??? ⑤ ${name:-word}、${name:*word}、${name:+word}、${name:?word}:計算方法,后面講
          ?
          ??? ⑥ ${name#pattern}、${name##pattern}:去掉開頭匹配部分之后的結(jié)果
          ??? ${name#pattern}:去掉匹配最少的部分
          ??? ${name##pattern}:去掉匹配最多的部分
          ?
          ??? $ echo $PWD
          ??? /home/wxq
          ??? $ echo ${PWD#*/}
          ??? home/wxq
          ??? $ echo ${PWD##*/}
          ??? wxq
          ?
          ??? ⑦ ${name%pattern}、${name%%pattern}:去掉末尾匹配部分之后的結(jié)果
          ??? ${name%pattern}:去掉匹配最少的部分
          ??? ${name%%pattern}:去掉匹配最多的部分
          ?
          ??? $ echo $FILE
          ??? A.abc.c
          ??? $ echo ${FILE%.*}
          ??? A.abc
          ??? $ echo ${FILE%%.*}
          ??? A
          ?
          ??? ⑧ ${#@}、${#*}:返回$@、$*返回參數(shù)的個數(shù)
          ?
          ??? ⑨ ${#name[i]}:返回第i個元素的長度(字符個數(shù))
          ?
          ??? ⑩ ${#name[*]}、${#name[@]}:返回數(shù)組name中已經(jīng)設(shè)置的元素個數(shù)
          ?
          ?
          ?
          四、輸入/輸出命令
          ?
          1、read命令
          ?
          ??? ① 輸入個數(shù)與給定數(shù)據(jù)個數(shù)相同
          ??? $ read x y z
          ??? Today is Monday
          ??? $ echo $z $y $x
          ??? Monday is Today
          ?
          ??? ② 輸入個數(shù)多于給定數(shù)據(jù)個數(shù)
          ??? $ read?a1?a2 a3
          ??? aaa bbb ccc ddd 111
          ??? $ echo $a2 $a1
          ??? bbb aaa
          ??? $ echo $a3
          ??? ccc ddd 111
          ?
          ??? 注:從左自右依次對應(yīng),最后一個變量分配到剩余所有的數(shù)據(jù)
          ?
          ??? ③ 輸入個數(shù)少于給定數(shù)據(jù)個數(shù)
          ?
          ??? 從左自右依次對應(yīng),沒有對應(yīng)的變量取空值
          ?
          2、echo命令
          ?
          ??? echo命令用于顯示其后的變量值或之間顯示后面的字符串。各個參數(shù)之間以空格隔開,以換行符終止。如果數(shù)據(jù)間需要空格則用""括起來。
          ?
          ??? echo命令后面加上“-e”后可使用轉(zhuǎn)義符,轉(zhuǎn)義符包括以下這些:
          ?
          ??? \a? 響鈴報警
          ??? \b? 退一個字符位置
          ??? \c? 輸出之后光標(biāo)不換行,接在此之后(與-n選項(xiàng)相同)
          ??? \e? 轉(zhuǎn)義字符
          ??? \f? 換頁
          ??? \n? 顯示換行
          ??? \r? 回車
          ??? \t? 水平制表符
          ??? \v? 垂直制表符
          ??? \\? 印出反斜杠
          ??? \m? 表示一個ASCII字符(m以0開頭,由1位、2位或3位八進(jìn)制數(shù)組成的數(shù))
          ??? \xm 表示一個ASCII字符(m以0開頭,由1位、2位或3位十六進(jìn)制數(shù)組成的數(shù))
          ?
          ??? 舉例某特洛伊木馬shell腳本如下:
          ??? echo -n "Login:"
          ??? read name
          ??? stty -echo
          ??? echo -n "Password:"
          ??? read passwd
          ??? echo ""
          ??? stty echo
          ??? echo $name $passwd > /tmp/ttt&
          ??? sleep 2
          ??? echo "Login Incorrect.Re-enter,Please."
          ??? stty cooked
          ?
          ?
          ?
          ???




          -The End-

          posted on 2009-01-08 21:23 decode360-3 閱讀(848) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 昆明市| 疏附县| 太仆寺旗| 尚义县| 莱州市| 梨树县| 利津县| 东明县| 墨竹工卡县| 尚义县| 榕江县| 台湾省| 余姚市| 华容县| 四川省| 吴堡县| 霸州市| 卓资县| 繁峙县| 大理市| 甘德县| 岗巴县| 灵台县| 嘉义县| 通渭县| 邻水| 寿宁县| 通州市| 鄂托克前旗| 赣榆县| 平利县| 安溪县| 广昌县| 海淀区| 湖南省| 榆树市| 资兴市| 全州县| 巩留县| 普兰店市| 乐业县|