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

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

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

    Decode360's Blog

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

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
    Linux shell程序設(shè)計(jì)(四).變量-2
    ?
    ??? 變量的內(nèi)容很多,繼續(xù)接著昨天的。這次包括:位置變量、預(yù)定義變量、環(huán)境變量。希望能夠都記住。
    ?
    ?
    五、位置參數(shù)
    ?
    1、位置參數(shù)及其引用
    ?
    ??? Linux可以用位置參數(shù)來(lái)定義命令行上的具體實(shí)參,例如:
    ??? $ 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對(duì)應(yīng)的是命令名(腳本名)
    ??? ② $n對(duì)應(yīng)第n個(gè)字符串(以空格隔開)
    ??? ③ $11對(duì)應(yīng)的是$1再跟上"1",若需要顯示第11個(gè)參數(shù),使用${11}
    ?
    ??? 再舉一個(gè)例子:
    ??? $ 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腳本后面帶的實(shí)參指定的文件后計(jì)算行數(shù)(最多9個(gè))
    ?
    2、用set命令為位置參數(shù)賦值
    ?
    ??? 可以利用set命令為位置參數(shù)賦值或重新賦值,例如:
    ??? $ set a b c
    ??? $ echo $0 $1 $3
    ????? -bash a c

    ??? 再舉個(gè)應(yīng)用的例子:
    ??? $ cat ex7
    ??????? #!/bin/bash
    ??????? set m1.c m2.c
    ??????? cat $1 $2 $3 | wc -l
    ??? $ ./ex7
    ????? 9
    ?
    3、移動(dòng)位置參數(shù)
    ?
    ??? 可以使用shift命令移動(dòng)除$0外的所有參數(shù)的位置(向右順移)
    ?
    ??? $ 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

    ?
    ?
    六、預(yù)先定義的特殊變量
    ?
    ??? ① $#:表示命令上上的參數(shù)個(gè)數(shù)(不包含命令本身)
    ??? ② $?:上一條命令執(zhí)行后的返回值(執(zhí)行成功為0 | 失敗為非0)
    ?? ③ $$:當(dāng)前進(jìn)程的進(jìn)程號(hào)
    ??????? 注:因?yàn)槊總€(gè)進(jìn)程都有唯一進(jìn)程號(hào),所以可以利用$$作為臨時(shí)文件的唯一文件名。
    ?? ④ $!:上一個(gè)后臺(tái)命令對(duì)應(yīng)的進(jìn)程號(hào)(是一個(gè)由1-5個(gè)數(shù)字構(gòu)成的字符串)
    ??? ⑤ $-:當(dāng)前shell設(shè)置的執(zhí)行標(biāo)識(shí)名
    ??????? $ set -xv
    ??????? $ echo display current shell flags $-
    ????????? display current shell flags himvxBH
    ?? ⑥ $*:列出所有的參數(shù)
    ??? ⑦ $@:基本與$*相同。區(qū)別在于:
    ??????? $ 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.
    ????? 發(fā)現(xiàn)$@在for循環(huán)時(shí)將各個(gè)參數(shù)分解,而$*不變
    ?
    ?
    七、環(huán)境變量
    ?
    ??? 在bash、sh、ksh中可以使用env命令以及不帶參數(shù)的set命令列出所有已定義的環(huán)境變量。
    ?
    ?1、常用環(huán)境變量 ?
    ?
    ??? ① HOME:用戶主目錄的全路徑名
    ?
    ??? 默認(rèn)為:/home/userid
    ??? 可以使用 cd $HOME | cd ~ | cd 來(lái)切換回主目錄路徑。
    ?
    ??? ② LOGNAME:注冊(cè)名,由Linux自動(dòng)設(shè)置
    ?
    ??? 可以通過(guò)LOGNAME變量使系統(tǒng)確認(rèn)文件的擁有著,有權(quán)執(zhí)行某個(gè)命令。
    ?
    ??? ③ MAIL:系統(tǒng)郵箱的地址
    ?
    ??? 默認(rèn)為:/var/spool/mail/userid
    ?
    ??? ④ PATH:shell從中查找命令的目錄列表
    ?
    ??? 多個(gè)目錄以“:”分開,可以使用以下命令添加目錄:
    ??? $ PATN=$PATH:$HOME/bin
    ??? 一般用戶自身的命令存放在 /usr/local/bin 目錄下
    ?
    ??? ⑤ PS1:shell的主提示符
    ?
    ??? 默認(rèn)為:\s-\v\$
    ??? 具體的參數(shù)說(shuō)明如下:
    ??? \d:以“星期 月 日”形式的日期
    ??? \h:主機(jī)名,直至第一個(gè)“.”為止
    ?? \H:主機(jī)全名
    ??? \s:所用的shell名稱
    ??? \t:按24小時(shí)制形式表現(xiàn)的時(shí)間
    ??? \T:按12小時(shí)制形式表現(xiàn)的時(shí)間
    ??? \@:按12小時(shí)制am/mp形式表示的時(shí)間
    ??? \u:當(dāng)前用戶名
    ?? \v:bash版本號(hào)
    ?? \w:當(dāng)前工作目錄
    ?? \$:若有效UID為0,則為“#”,否則為“$”
    ?
    ??? ⑥ PWD:當(dāng)前工作目錄路徑
    ?
    ??? ⑦ SHELL:當(dāng)前使用的shell及解釋程序位置
    ?
    ??? ⑧ TERM:終端類型
    ?
    ??? 本機(jī):vt100
    ?
    2、使用環(huán)境變量
    ?
    ??? 用echo命令查看任何一個(gè)環(huán)境變量
    ??? $ echo $SHELL
    ??????? /bin/bash
    ?
    ??? 注:由上可知,用“$”可以引用任何的環(huán)境變量作為變量使用
    ?
    3、刪除環(huán)境變量
    ?
    ??? $ unset NAME
    ??? 注:不要加“$”
    ?
    ?
    ?
    ?
    posted on 2009-01-09 21:10 decode360 閱讀(245) 評(píng)論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 国产无遮挡又黄又爽免费视频| 亚洲一区二区三区夜色 | 亚洲色图在线观看| 日日狠狠久久偷偷色综合免费| aⅴ免费在线观看| 日韩精品亚洲专区在线观看| 亚洲伊人久久大香线蕉| 国产JIZZ中国JIZZ免费看| 国产成人A在线观看视频免费| 亚洲中文字幕久久精品无码APP| 亚洲av无码一区二区三区人妖| 日本视频一区在线观看免费| 亚洲国产精品无码专区影院 | 久久久久成人精品免费播放动漫| www.亚洲色图.com| 亚洲变态另类一区二区三区| 最近中文字幕国语免费完整| 亚洲熟妇av一区二区三区| 菠萝菠萝蜜在线免费视频| 国产免费毛不卡片| 亚洲a一级免费视频| 国内精品免费久久影院| 亚洲中文字幕丝袜制服一区| 亚洲av色香蕉一区二区三区 | 久久久久亚洲国产AV麻豆 | 久久久久久噜噜精品免费直播| 亚洲一区二区三区在线视频| 九九全国免费视频| 久久精品国产亚洲7777| 中文字幕的电影免费网站| 亚洲中文字幕无码永久在线| 最新久久免费视频| 久久亚洲伊人中字综合精品| 亚洲国产精品免费视频| 日木av无码专区亚洲av毛片| 亚洲免费一级视频| 日韩亚洲产在线观看| 免费精品一区二区三区在线观看 | 亚洲欧洲精品久久| 99在线精品视频观看免费| 国产成人精品亚洲2020|