<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程序設計(四).變量-2
    ?
    ??? 變量的內容很多,繼續接著昨天的。這次包括:位置變量、預定義變量、環境變量。希望能夠都記住。
    ?
    ?
    五、位置參數
    ?
    1、位置參數及其引用
    ?
    ??? Linux可以用位置參數來定義命令行上的具體實參,例如:
    ??? $ set `pwd;ls;date`
    ??? $ echo $0 $1 $2 $3 $4 $5 $6 $11 ${11}
    ??? -bash /opt/test a bbb kkk nnn Thu /opt/test1 2009
    ?
    ??? 由上例可見:
    ??? ① $0對應的是命令名(腳本名)
    ??? ② $n對應第n個字符串(以空格隔開)
    ??? ③ $11對應的是$1再跟上"1",若需要顯示第11個參數,使用${11}
    ?
    ??? 再舉一個例子:
    ??? $ cat m1.c
    ??????? main()
    ??????? {
    ??????????? printf("Begin\n");
    ??????? }
    ??? $ cat m2.c
    ??? main()
    ??? {
    ??????? print("OK!\n");
    ??????? print("End!\n");
    ??? }
    ??? $ cat ex6
    ??????? # ex6:shell script to combine files and count lines
    ????????? cat $1 $2 $3 $4 $5 $6 $7 $8 $9 | wc -l
    ??????? # end
    ??? $ ./ex6 m1.c m2.c
    ????? 9
    ?
    ??? 這段代碼的意思是:依次打印ex6腳本后面帶的實參指定的文件后計算行數(最多9個)
    ?
    2、用set命令為位置參數賦值
    ?
    ??? 可以利用set命令為位置參數賦值或重新賦值,例如:
    ??? $ set a b c
    ??? $ echo $0 $1 $3
    ????? -bash a c

    ??? 再舉個應用的例子:
    ??? $ cat ex7
    ??????? #!/bin/bash
    ??????? set m1.c m2.c
    ??????? cat $1 $2 $3 | wc -l
    ??? $ ./ex7
    ????? 9
    ?
    3、移動位置參數
    ?
    ??? 可以使用shift命令移動除$0外的所有參數的位置(向右順移)
    ?
    ??? $ cat ex8
    ??????? #!/bin/bash
    ??????? echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
    ??????? shift
    ??????? echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
    ??????? shift 4
    ??????? echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
    ??????? #end
    ??? $ ./ex8 A B V F G T R E D S
    ????? ./ex8 A B V F G T R E D
    ????? ./ex8 B V F G T R E D S
    ????? ./ex8 T R E D S

    ?
    ?
    六、預先定義的特殊變量
    ?
    ??? ① $#:表示命令上上的參數個數(不包含命令本身)
    ??? ② $?:上一條命令執行后的返回值(執行成功為0 | 失敗為非0)
    ?? ③ $$:當前進程的進程號
    ??????? 注:因為每個進程都有唯一進程號,所以可以利用$$作為臨時文件的唯一文件名。
    ?? ④ $!:上一個后臺命令對應的進程號(是一個由1-5個數字構成的字符串)
    ??? ⑤ $-:當前shell設置的執行標識名
    ??????? $ set -xv
    ??????? $ echo display current shell flags $-
    ????????? display current shell flags himvxBH
    ?? ⑥ $*:列出所有的參數
    ??? ⑦ $@:基本與$*相同。區別在于:
    ??????? $ cat ex10
    ????????? #!/bin/bash
    ????????? date
    ????????? set `date`
    ????????? echo $*
    ????????? for i in "$*"
    ????????? do echo $i;
    ????????? done
    ????????? echo $@
    ????????? for i in "$@"
    ????????? do echo $i;
    ????????? done
    ????????? echo "end."
    ??????? $ ./ex10
    ????????? Thu Mar 5 16:59:01 CST 2009
    ????????? Thu Mar 5 16:59:01 CST 2009
    ????????? Thu Mar 5 16:59:01 CST 2009
    ????????? Thu Mar 5 16:59:01 CST 2009
    ????????? Thu
    ????????? Mar
    ????????? 5
    ????????? 16:59:01
    ????????? CST
    ????????? 2009
    ????????? end.
    ????? 發現$@在for循環時將各個參數分解,而$*不變
    ?
    ?
    七、環境變量
    ?
    ??? 在bash、sh、ksh中可以使用env命令以及不帶參數的set命令列出所有已定義的環境變量。
    ?
    ?1、常用環境變量 ?
    ?
    ??? ① HOME:用戶主目錄的全路徑名
    ?
    ??? 默認為:/home/userid
    ??? 可以使用 cd $HOME | cd ~ | cd 來切換回主目錄路徑。
    ?
    ??? ② LOGNAME:注冊名,由Linux自動設置
    ?
    ??? 可以通過LOGNAME變量使系統確認文件的擁有著,有權執行某個命令。
    ?
    ??? ③ MAIL:系統郵箱的地址
    ?
    ??? 默認為:/var/spool/mail/userid
    ?
    ??? ④ PATH:shell從中查找命令的目錄列表
    ?
    ??? 多個目錄以“:”分開,可以使用以下命令添加目錄:
    ??? $ PATN=$PATH:$HOME/bin
    ??? 一般用戶自身的命令存放在 /usr/local/bin 目錄下
    ?
    ??? ⑤ PS1:shell的主提示符
    ?
    ??? 默認為:\s-\v\$
    ??? 具體的參數說明如下:
    ??? \d:以“星期 月 日”形式的日期
    ??? \h:主機名,直至第一個“.”為止
    ?? \H:主機全名
    ??? \s:所用的shell名稱
    ??? \t:按24小時制形式表現的時間
    ??? \T:按12小時制形式表現的時間
    ??? \@:按12小時制am/mp形式表示的時間
    ??? \u:當前用戶名
    ?? \v:bash版本號
    ?? \w:當前工作目錄
    ?? \$:若有效UID為0,則為“#”,否則為“$”
    ?
    ??? ⑥ PWD:當前工作目錄路徑
    ?
    ??? ⑦ SHELL:當前使用的shell及解釋程序位置
    ?
    ??? ⑧ TERM:終端類型
    ?
    ??? 本機:vt100
    ?
    2、使用環境變量
    ?
    ??? 用echo命令查看任何一個環境變量
    ??? $ echo $SHELL
    ??????? /bin/bash
    ?
    ??? 注:由上可知,用“$”可以引用任何的環境變量作為變量使用
    ?
    3、刪除環境變量
    ?
    ??? $ unset NAME
    ??? 注:不要加“$”
    ?
    ?
    ?
    ?
    posted on 2009-01-09 21:10 decode360 閱讀(245) 評論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 国产aa免费视频| 国产免费一区二区视频| 97在线观免费视频观看| 亚洲成A∨人片在线观看无码| 久久久久久成人毛片免费看| 国产亚洲精品xxx| 国产免费一区二区三区在线观看| 亚洲区小说区图片区QVOD| 国产一级片免费看| 亚洲蜜芽在线精品一区| 999在线视频精品免费播放观看| 亚洲AV无码一区二区三区人 | 老司机亚洲精品影视www| 国产97视频人人做人人爱免费| 久久久久无码专区亚洲av| 黄色免费在线网站| 亚洲精品综合久久中文字幕| 日韩精品福利片午夜免费观着| 亚洲av无码一区二区三区天堂| 亚洲国产精品无码久久九九 | 无遮挡国产高潮视频免费观看| 久久精品亚洲男人的天堂| 久久午夜免费鲁丝片| 亚洲AV无码专区在线亚| 在线a亚洲v天堂网2018| 日本高清不卡aⅴ免费网站| 亚洲日本香蕉视频| 国产三级免费电影| 久久久久久国产精品免费无码| 亚洲va成无码人在线观看| 国产gav成人免费播放视频| 在线涩涩免费观看国产精品| 亚洲一线产区二线产区精华| 免费人妻无码不卡中文字幕18禁| 成全视频高清免费观看电视剧| 亚洲av无码不卡久久| 亚洲成A人片77777国产| 国产精品爱啪在线线免费观看| 一区二区三区AV高清免费波多| 久久综合亚洲色一区二区三区| 国产精品免费_区二区三区观看|