亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: [shell] getopts的問題 [打印本頁(yè)]

作者: xmbbx    時(shí)間: 2011-01-04 20:45
標(biāo)題: [shell] getopts的問題
本帖最后由 xmbbx 于 2011-01-05 09:55 編輯

看代碼:

  1. #!/bin/bash

  2. function LOG
  3. {
  4.     while getopts 't:' OPT
  5.     do
  6.         case $OPT in
  7.             t)
  8.                 LABEL="$OPTARG";;
  9.             ?)
  10.                 echo "Usage: LOG [options] Message";;
  11.         esac
  12.     done
  13.     shift $(($OPTIND-1))
  14.     MSG=${1:-""}
  15.     echo "$(date +"%b %d %X") ${LABEL}: ${MSG}"
  16. }

  17. LOG -t DEBUG "test test1"
  18. LOG -t ERROR "test test2"
  19. LOG -t ERROR "test test3"
  20. LOG -t INFO "test test4"
復(fù)制代碼
運(yùn)行的結(jié)果達(dá)不到預(yù)期:
[root@localhost root]# bash tt.sh
Jan 04 20:38:43 DEBUG: test test1
Jan 04 20:38:43 DEBUG: test test2
Jan 04 20:38:43 DEBUG: test test3
Jan 04 20:38:43 DEBUG: test test4

預(yù)期應(yīng)該是這樣的:
[root@localhost root]# bash tt.sh
Jan 04 20:38:43 DEBUG: test test1
Jan 04 20:38:43 ERROR : test test2
Jan 04 20:38:43 ERROR: test test3
Jan 04 20:38:43 INFO: test test4

什么問題呢?
作者: xmbbx    時(shí)間: 2011-01-05 09:54
這個(gè)很奇怪啊
作者: jason680    時(shí)間: 2011-01-05 10:30
看代碼:運(yùn)行的結(jié)果達(dá)不到預(yù)期:
[root@localhost root]# bash tt.sh
Jan 04 20:38:43 DEBUG: test test ...
xmbbx 發(fā)表于 2011-01-04 20:45


試試....
  1. #!/bin/bash

  2. function LOG
  3. {
  4.     local LABEL=$1
  5.     local MSG=$2
  6.     echo "$(date +"%b %d %X") ${LABEL}: ${MSG}"
  7. }

  8. LOG  DEBUG "test test1"
  9. LOG  ERROR "test test2"
  10. LOG  ERROR "test test3"
  11. LOG  INFO "test test4"
復(fù)制代碼

作者: xmbbx    時(shí)間: 2011-01-05 11:19
回復(fù) 3# jason680


    呵呵,這個(gè)是一種辦法。
我就是想知道為啥用getopts不行。
作者: jiaminqiang    時(shí)間: 2011-01-05 11:58
[root@localhost shell]# sh -x  test
+ LOG -t DEBUG 'test test1'
+ getopts t: OPT
+ case $OPT in
+ LABEL=DEBUG
+ getopts t: OPT
+ shift 2

+ MSG='test test1'
++ date '+%b %d %X'
+ echo ' 1月 05 11時(shí)55分41秒 DEBUG: test test1'
1月 05 11時(shí)55分41秒 DEBUG: test test1
+ LOG -t ERROR 'test test2'
+ getopts t: OPT
+ shift 2

+ MSG='test test2'
++ date '+%b %d %X'
+ echo ' 1月 05 11時(shí)55分41秒 DEBUG: test test2'
1月 05 11時(shí)55分41秒 DEBUG: test test2
作者: xmbbx    時(shí)間: 2011-01-05 15:21
回復(fù) 5# jiaminqiang


    不是很明白,第二次調(diào)用時(shí)沒有認(rèn)到-t? 要怎么改。
作者: jason680    時(shí)間: 2011-01-05 15:48
回復(fù)  jason680


    呵呵,這個(gè)是一種辦法。
我就是想知道為啥用getopts不行。
xmbbx 發(fā)表于 2011-01-05 11:19



就我所知getopts用在command line
你把它用在function上,沒有這樣用的經(jīng)驗(yàn).....
(你這樣用有問題,更證明不應(yīng)該這樣用...)

個(gè)人認(rèn)為:
command Line會(huì)有各式各樣的問題,而且下command的人不一定是你
   所以無法得知使用者要怎么調(diào)用你的腳本程式...
  但function是你自己是調(diào)用的...為什么要那么累.....
  code變多,也沒有比較好懂,多此一舉....
作者: jason680    時(shí)間: 2011-01-05 16:00
本帖最后由 jason680 于 2011-01-05 16:05 編輯
回復(fù)  jiaminqiang


    不是很明白,第二次調(diào)用時(shí)沒有認(rèn)到-t? 要怎么改。
xmbbx 發(fā)表于 2011-01-05 15:21


找到了....
getopts的變數(shù)有 OPTIND與OPTARG
你要把OPTIND設(shè)回1才可以

function LOG
{
    OPTIND=1
    while getopts 't:' OPT
    do
       ...

# bash LOG.sh
Jan 05 03:55:03 PM DEBUG: test test1
Jan 05 03:55:03 PM ERROR: test test2
Jan 05 03:55:03 PM ERROR: test test3
Jan 05 03:55:03 PM INFO: test test4
作者: xmbbx    時(shí)間: 2011-01-05 16:13
回復(fù) 8# jason680


    非常感謝,解決了我郁悶1天的疑惑。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2