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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 5124 | 回復(fù): 9
打印 上一主題 下一主題

[轉(zhuǎn)貼]shift用法  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2005-12-23 23:29 |只看該作者 |倒序?yàn)g覽

  1. Until語(yǔ)句

  2.   While語(yǔ)句中,只要某條件為真,則重復(fù)執(zhí)行循環(huán)代碼,until語(yǔ)句正好同while相反,該語(yǔ)句使循環(huán)代碼重復(fù)執(zhí)行,直到遇到某一條件為真才停止。

  3. Until語(yǔ)句的結(jié)構(gòu)如下:
  4. until command
  5.   do
  6.     command
  7.     command
  8.     … …
  9.   done

  10.   可以用until語(yǔ)句替換上面?zhèn)浞莩绦虻膚hile語(yǔ)句,完成同樣的功能:

  11. until [ $ANS != Y -a $ANS != y ]

  12. for 循環(huán)
  13.   在介紹for循環(huán)之前,我們要學(xué)個(gè)非常有用的unix命令:shift。我們知道,對(duì)于位置變量或命令行參數(shù),其個(gè)數(shù)必須是確定的,或者當(dāng)Shell程序不知道其個(gè)數(shù)時(shí),可以把所有參數(shù)一起賦值給變量$*。若用戶要求Shell在不知道位置變量個(gè)數(shù)的情況下,還能逐個(gè)的把參數(shù)一一處理,也就是在$1后為$2,在$2后面為$3等。在 shift命令執(zhí)行前變量$1的值在shift命令執(zhí)行后就不可用了。

  14. 示例如下:

  15. #測(cè)試shift命令(x_shift.sh)
  16.     until [ $# -eq 0 ]
  17.     do
  18.          echo "第一個(gè)參數(shù)為: $1 參數(shù)個(gè)數(shù)為: $#"
  19.          shift
  20.     done
  21. 執(zhí)行以上程序x_shift.sh:
  22.     $./x_shift.sh 1 2 3 4

  23. 結(jié)果顯示如下:

  24.     第一個(gè)參數(shù)為: 1 參數(shù)個(gè)數(shù)為: 3
  25.     第一個(gè)參數(shù)為: 2 參數(shù)個(gè)數(shù)為: 2
  26.     第一個(gè)參數(shù)為: 3 參數(shù)個(gè)數(shù)為: 1
  27.     第一個(gè)參數(shù)為: 4 參數(shù)個(gè)數(shù)為: 0

  28. 從上可知shift命令每執(zhí)行一次,變量的個(gè)數(shù)($#)減一,而變量值提前一位,下面代碼用until和shift命令計(jì)算所有命令行參數(shù)的和。

  29. #shift上檔命令的應(yīng)用(x_shift2.sh)
  30.     if [ $# -eq 0 ]
  31.     then
  32.         echo "Usage:x_shift2.sh 參數(shù)"
  33.         exit 1
  34.     fi
  35.     sum=0
  36.     until [ $# -eq 0 ]
  37.     do
  38.         sum=`expr $sum + $1`
  39.         shift
  40.     done
  41.     echo "sum is: $sum"

  42. 執(zhí)行上述程序:

  43.     $x_shift2.sh 10 20 15

  44. 其顯示結(jié)果為:

  45.     45

  46.   shift命令還有另外一個(gè)重要用途,Bsh定義了9個(gè)位置變量,從$1到$9,這并不意味著用戶在命令行只能使用9個(gè)參數(shù),借助shift命令可以訪問多于9個(gè)的參數(shù)。

  47.   Shift命令一次移動(dòng)參數(shù)的個(gè)數(shù)由其所帶的參數(shù)指定。例如當(dāng)shell程序處理完前九個(gè)命令行參數(shù)后,可以使用shift 9命令把$10移到$1。

  48.   在熟悉了shift命令后,我們一起看看,Bsh程序中非常有用的for循環(huán)語(yǔ)句,這種循環(huán)同上面說(shuō)的while和until循環(huán)不同,for語(yǔ)句中的循環(huán)是否執(zhí)行并不由某個(gè)條件的真和假來(lái)決定,決定for循環(huán)是否繼續(xù)的條件是參數(shù)表中是否還有未處理的參數(shù)。


  49. 調(diào)試shell程序

  50.   用戶剛編寫完Shell程序中,不可避免的會(huì)有錯(cuò)誤,這時(shí)我們可以利用Bsh中提供的跟蹤選項(xiàng),該選項(xiàng)會(huì)顯示剛剛執(zhí)行的命令及參數(shù)。用戶可以通過set命令打開-x選項(xiàng)或在啟動(dòng)Shell使用-x選項(xiàng)將Shell設(shè)置成跟蹤模式。例如有下面代碼ice_tx:

  51.   if [ $# -eq 0 ]
  52.   then
  53.     echo "usage:sumints integer list"
  54.     exit 1
  55.   fi
  56.   sum=0
  57.   until [ $# -eq 0 ]
  58.   do
  59.     sum='expr $sum + $1'
  60.     shift
  61.   done
  62.   echo $sum

  63.   我們用跟蹤模式運(yùn)行:

  64.   $sh -x ice_tx 2 3 4
  65.   結(jié)果顯示:
  66.   +[ 3 -eq 0 ]
  67.   +sum=0
  68.   +[ 3 -eq 0 ]
  69.   +expr 0+2
  70.   +sum=2
  71.   +shift
  72.   +[ 2 -eq 0 ]
  73.   +expr 2+3
  74.   +sum=5
  75.   +shift
  76.   +[ 1 -eq 0 ]
  77.   +expr 5+4
  78.   +sum=9
  79.   +[ 0 -eq 0 ]
  80.   +echo 9
  81.   9

  82.   從上面可以看出,跟蹤模式下Shell顯示執(zhí)行的每一條命令以及該命令使用的變量替換后的參數(shù)值。一些控制字如if、then、until等沒顯示。


復(fù)制代碼

評(píng)分

參與人數(shù) 1可用積分 +2 收起 理由
wingger + 2

查看全部評(píng)分

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
2 [報(bào)告]
發(fā)表于 2005-12-23 23:36 |只看該作者
其實(shí),for結(jié)構(gòu)就有一個(gè)隱含的shift,沒迭代一次,for的varlist左移一次

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
3 [報(bào)告]
發(fā)表于 2005-12-23 23:51 |只看該作者
另外,顯式的shift似乎只對(duì)位置參數(shù)感冒

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2005-12-23 23:59 |只看該作者
原帖由 寂寞烈火 于 2005-12-23 23:51 發(fā)表
另外,顯式的shift似乎只對(duì)位置參數(shù)感冒

烈火寫個(gè)全的來(lái),我對(duì)這個(gè)也是屬于學(xué)習(xí)階段

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
5 [報(bào)告]
發(fā)表于 2005-12-24 00:09 |只看該作者
原帖由 大螞蟻 于 2005-12-23 23:59 發(fā)表

烈火寫個(gè)全的來(lái),我對(duì)這個(gè)也是屬于學(xué)習(xí)階段

我的ABS還沒看到那兒呢 我也跟你一樣呀!

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
6 [報(bào)告]
發(fā)表于 2005-12-24 11:57 |只看該作者
abs好像沒有關(guān)于shift的文章

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
7 [報(bào)告]
發(fā)表于 2005-12-24 12:11 |只看該作者
原帖由 wingger 于 2005-12-24 11:57 發(fā)表
abs好像沒有關(guān)于shift的文章

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2005-12-28 17:17 |只看該作者

  1. $ set 1 2 3 4 5 6 7 8 9 a b c d e f

  2. $ echo $*
  3. 1 2 3 4 5 6 7 8 9 a b c d e f

  4. $ echo ${10}
  5. a

  6. $ shift

  7. $ echo $*
  8. 2 3 4 5 6 7 8 9 a b c d e f
復(fù)制代碼

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2006-01-01 22:54 |只看該作者
看不到.繼續(xù)學(xué)習(xí)了.

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2007-09-27 17:53 |只看該作者
剛剛查了下SHIFT,MS有問題。。

#測(cè)試shift命令(x_shift.sh)
    until [ $# -eq 0 ]
    do
         echo "第一個(gè)參數(shù)為: $1 參數(shù)個(gè)數(shù)為: $#"
         shift
    done
執(zhí)行以上程序x_shift.sh:
    $./x_shift.sh 1 2 3 4

結(jié)果顯示如下:

    第一個(gè)參數(shù)為: 1 參數(shù)個(gè)數(shù)為: 3  (4)
    第一個(gè)參數(shù)為: 2 參數(shù)個(gè)數(shù)為: 2    (3)
    第一個(gè)參數(shù)為: 3 參數(shù)個(gè)數(shù)為: 1    (2)
    第一個(gè)參數(shù)為: 4 參數(shù)個(gè)數(shù)為: 0    (1)
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP