Decode360's Blog

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          五、位置參數
          ?
          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
          ??? 注:不要加“$”
          ?
          ?
          ?
          ?




          -The End-

          posted on 2009-01-09 21:10 decode360-3 閱讀(527) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 上思县| 横峰县| 于田县| 南雄市| 贺州市| 曲靖市| 瑞金市| 无极县| 巫溪县| 屯留县| 醴陵市| 吐鲁番市| 观塘区| 桦甸市| 通江县| 墨江| 库尔勒市| 武清区| 垦利县| 永安市| 勃利县| 连城县| 宝丰县| 胶州市| 康保县| 新巴尔虎左旗| 乌审旗| 巴马| 德阳市| 利津县| 平乡县| 湄潭县| 东乡县| 且末县| 石阡县| 迁西县| 桐城市| 赫章县| 昭苏县| 三河市| 廊坊市|