日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell 命令行实现

發布時間:2025/7/25 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell 命令行实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明:原文網址http://blog.chinaunix.net/uid-26807463-id-3151601.html

獲取UNIX類型的選項:

  unix有一個優點就是標準UNIX命令在執行時都具有相同的命令行格式:

  command?-options?parameters

  如果在執行Shell程序也采用上述格式,Bourne?Shell中提供了一條獲取和處理命令行選項的語句,即getopts語句。該語句的格式為:

  getopts?option_string?variable

  其中option_string中包含一個有效的單字符選項。若getopts命令在命令行中發現了連字符,那么它將用連字符后面的字符同?option_string相比較。若有匹配,則把變量variable的值設為該選項。若無匹配,則variable設為?。當getopts發現連字符后面沒有字符,會返回一個非零的狀態值。Shell程序中可以利用getopts的返回值建立一個循環。

  有時侯選項中還帶一個值,getopts命令同樣也支持這一功能。這時需要在option_string中選項字母后加一個冒號。當?getopts命令發現冒號后,會從命令行該選項后讀取該值。若該值存在,那么將被存在一個特殊的變量OPTARG中。如果該值不存在,getopts命令將在OPTARG中存放一個問號,并且在標準錯誤輸出上顯示一條消息。

  optstring??option字符串,會逐個匹配

  varname?????每次匹配成功的選項

  arg?????????????參數列表,沒寫時它會取命令行參數列表

  $OPTIND?????特殊變量,option?index,會逐個遞增,?初始值為1

  $OPTARG????特殊變量,option?argument,不同情況下有不同的值

細則1
optstring”:“開頭時,getopts會區分invalid?option錯誤和miss?option?argument。?invalid?option錯誤時,varname會被設成?,$OPTARG是出問題的optionmiss?option?argument,varname會被設成:(在我的fedora系統里測試OPTARG?),$OPTARG是出問題的option.


optstring不以”:“開頭,invalid?option錯誤和miss?option?argument錯誤都會使varname被設成?,?$OPTARG是出問題的option(在我的fedora系統里測試OPTARG為空).

細則2
optstring中的字母跟”:“,表明該option可接參數,參數(argument)放在$OPTARG,如果缺參數,optstring是以”:“開頭,varname的值會是:(在我的fedora系統里測試OPTARG?),$OPTARG是該option,?否則varname的值是?,$OPTARG是該option.(參照細則1)(在我的fedora系統里測試OPTARG為空)

1?#!/bin/bash??

2?if?[[?$#?-lt?1?]];then??

3?????echo?"USAGE:`basename?$0`?[-a]?[-b?value]?[-c]"??

4?????exit?1??

5?fi????

6????

7?while?getopts?:ab:c?name??

8?do??

9?????case?$name?in??

10?????????a)??aflag=1??

11?????????echo?"a"??

12?????????;;??

13?????????b)??bflag=1??

14???

15?????????if?[[?${OPTARG:0:1}?=?"-"?]];?then??

16?????????????echo?"invalid?parameter?of?$OPTARG"??

17?????????????exit?1??

18?????????fi??

19???

20?????????bval=$OPTARG??

21?????????;;??

22?????????c)??cflag=1??

23?????????echo?"c"??

24?????????;;??

25?????????\?)?echo?"Invalid?option?:`basename?$0`?[-a]?[-b?value]?[-c]"??

26?????????exit?1??

27?????????;;??

28?????????:)?echo?"$0:Must?supply?an?argument?to?-$OPTARG."??

29?????????exit?1??

30?????????;;??

31?????esac??

32?done??

33?echo?$bval??

getopts分析選項時,如果-b后面不帶參數,直接跟-c的話,那么-c將作為-b的參數。


下面是一個簡單例子(腳本為getopt):


#/bin/bash

echo?$0

echo?$*

while?getopts?":a:bc"?opt

do

????????case?$opt?in

????????????????a?)

????????????????????????echo?$OPTARG????????????????????

????????????????????????echo?$OPTIND;;

????????????????b?)

????????????????????????echo?"b?$OPTIND";;

????????????????c?)

????????????????????????echo?"c?$OPTIND";;

??????????????????)

????????????????????????echo?"error"????????????????????

????????????????????????exit?1;;

????????????????esac

done

echo?$OPTIND

echo?$*

shift?$(($OPTIND?-?1))

echo?$*

echo?$0

運行sh?getopt.sh??-a?12?-b?-c?34?-m
輸出:

getopt.sh

-a?12?-b?-c?34

12

3

b?4

c?5

5

-a?12?-b?-c?34

34

getopt.sh

可以得出一些結論: 

1$0在用sh?或者?./執行腳本時,指的是腳本名,用source.執行時,永運是bash,這也反應了sh?或者?./執行腳本的原理和source的方式是不同的.

2$1?(1....n)指的第一個參數到....n個參數

3OPTARG存儲相應選項的參數?OPTIND指向的是下一個參數的index

4shift?會改變參數的順序,通過左移去掉某些參數

5、getopts檢測到非法參數就會停止,比如上例中遇到34就會終止,并不會去檢測-m了,也就是說只要前一個參數是合法的(包含在option_string中的),就會繼續檢測下一個參數。

另外: unset OPTIND? 可以解決shell腳本的函數中使用getopts

總結

以上是生活随笔為你收集整理的shell 命令行实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人精品久久 | 欧美a∨亚洲欧美亚洲 | 成人永久免费 | 亚洲综合网av | 老司机午夜免费福利 | 特级毛片www | 黄色片成年人 | 天天综合网久久 | 在线免费观看视频你懂的 | 草草福利视频 | 日日草草 | 欧美丰满老熟妇xxxxx性 | 粉嫩av懂色av蜜臀av分享 | 国产视频123区 | 毛片在线免费观看视频 | 美国一区二区 | 中文字幕在线一区二区三区 | 国产免费久久精品国产传媒 | 777片理伦片在线观看 | 9999免费视频 | 99热6这里只有精品 三级av在线免费观看 | 国产主播一区二区三区 | 日本亲与子乱ay中文 | 麻豆视频免费在线观看 | 中文字幕一区二区精品 | 欧美人体视频一区二区三区 | 国产福利专区 | 欧美性第一页 | 91蜜桃婷婷狠狠久久综合9色 | 国产精品一区二区亚洲 | 免费裸体视频网站 | 伊人色爱 | 日本a在线播放 | 亚洲成人黄色影院 | 国产伦精品一区二区三区视频黑人 | 深夜视频在线免费 | 天天伊人网 | 台湾少妇xxxx做受 | 性做久久久久 | 亚洲黄色片| 一区二区日韩在线观看 | 欧美午夜精品久久久久久浪潮 | 天天爱天天色 | 国产成人无码网站 | 葵司在线视频 | 最新黄色网址在线观看 | 成人综合在线视频 | 99re在线视频免费观看 | 最污的网站| 国产一区欧美日韩 | 日韩一区二区视频 | 男人深夜影院 | 日日夜夜免费视频 | 人人超碰在线 | 天堂最新资源在线 | 国产热99| 巨大乳の揉んで乳榨り奶水 | 久久久精品人妻av一区二区三区 | 少妇欧美激情一区二区三区 | 国产精品成人一区二区三区电影毛片 | 九九热视频在线观看 | 亚洲毛片一区二区 | 黄色岛国片 | 中文字幕第四页 | 91视频.com| 久久久久久久久久久久国产 | 69天堂 | 黑白配在线观看免费观看 | 大又大粗又爽又黄少妇毛片 | 韩国不卡av | 隣の若妻さん波多野结衣 | 天堂在线成人 | 欧美做爰全过程免费观看 | 色狠 | 日本成人在线一区 | 别揉我奶头一区二区三区 | 久草青青| 中文字幕1区 | 午夜黄色剧场 | 奇米超碰在线 | 国产免费无遮挡吸奶头视频 | 久久久久久久久久久99 | 国产精品suv一区二区69 | 免费av网站在线播放 | 欧美日韩一区二区三区在线电影 | 久久水蜜桃 | 成年网站在线观看 | 亚洲精品粉嫩小泬20p | 日日弄天天弄美女bbbb | 男人天堂影院 | 一区二区三区四区久久 | 免费视频一二三区 | 日本黄色小片 | 91在线短视频 | 好吊妞视频在线 | 日本乱淫视频 | 国产一区二区黑人欧美xxxx | 国产精品女同 | 亚洲天堂福利 |