当前位置:网站首页>Introduction to the usage of getopts in shell
Introduction to the usage of getopts in shell
2022-07-03 08:53:00 【Xiaoping is extraordinary】
One 、getopts Command profile
getopts Command is used to parse Shell Tools for scripting command line parameters ,getopts Command parameters contain option characters that need to be recognized , If the option character is followed by a colon , Indicates that the character option requires a command line parameter ( The option characters and the corresponding command line parameters are separated by spaces )( Be careful : The colon & Question marks cannot be used as option characters ).getopts Every time a command is called , Put it in the next variable ,OPTARG Then you can get the parameter value ; If option Put a colon in front of it , It means ignoring the error
1.1 Command use format
getopts optstring name [arg...]
- optstring List the corresponding Shell All parameters recognized by the script , for example : Need to use -a,-f,-s When parameters are ,optstring yes afs; If necessary, the command line parameter is followed by a value , In the corresponding optstring Add a colon to the back , for example a:fs Express a There will be a value after the command line parameter , yes **-a value** In the form of ;
- getopts If... Is matched during execution a Parameters , Will be able to -a Parameter corresponding value Stored in a place called OPTARG Of Shell Variable in ;
- If optstring It starts with a colon , It indicates that when the command line appears optstring No error message will be prompted for parameters not in
Two 、 Example
stay Shell Script , For simple parameters , Often use $1,2 , . . . , n Just deal with it . But when there are too many command line parameters or we need to distinguish the use of command line parameters , You need to use getopts command
2.1
#!/bin/bash
func() {
echo "Usage:"
echo "test.sh [-j S_DIR] [-m D_DIR]"
echo "Description:"
echo "S_DIR,the path of source."
echo "D_DIR,the path of destination."
exit -1
}
upload="false"
while getopts 'h:j:m:u' OPT; do
case $OPT in
j) S_DIR="$OPTARG";;
m) D_DIR="$OPTARG";;
u) upload="true";;
h) func;;
?) func;;
esac
done
echo $S_DIR
echo $D_DIR
echo $upload
situation 1:
sh test.sh -j /data/usw/web -m /opt/data/web
## Output results
/data/usw/web
/opt/data/web
false
situation 2:
getopts In the option character of the command , If you don't follow : The letter of is Switch type options , You do not need to specify a value , Equate to true/false, As long as you take this parameter with you, it's true. In the following example -u
getopts After the command recognizes each option , You can cooperate with case To operate . In operation , There are two " Constant ", One is OPTARG, To get the value of the current option ; The other is OPTIND, Express The displacement of the current option in the parameter list .case Of The last one is ?, Is used to identify illegal options , And carry out the corresponding operation , Our script outputs help information
sh test.sh -j /data/usw/web -m /opt/data/web -u
## Output results
/data/usw/web
/opt/data/web
true
situation 3:
sh test.sh -h
## Output results
test.sh: option requires an argument -- h
Usage:
test.sh [-j S_DIR] [-m D_DIR]
Description:
S_DIR,the path of source.
D_DIR,the path of destination.
situation 4:
sh test.sh j
## Output results
false
2.2
#!/bin/bash
func() {
echo "func:"
echo "test.sh [-j S_DIR] [-m D_DIR]"
echo "Description:"
echo "S_DIR, the path of source."
echo "D_DIR, the path of destination."
exit -1
}
upload="false"
echo $OPTIND
while getopts 'j:m:u' OPT; do
case $OPT in
j) S_DIR="$OPTARG";;
m) D_DIR="$OPTARG";;
u) upload="true";;
?) func;;
esac
done
echo $OPTIND
shift $(($OPTIND - 1))
echo $1
situation 1:
sh test.sh -j /data/usw/web beijing
## Output results
1
3
beijing
situation 2:
sh test.sh -m /opt/data/web beijing
1
3
beijing
situation 3:
sh test.sh -j /data/usw/web -m /opt/data/web beijing
1
5
beijing
situation 4:
sh test.sh -j /data/usw/web -m /opt/data/web -u beijing
1
6
beijing
边栏推荐
- On the difference and connection between find and select in TP5 framework
- [rust notes] 12 closure
- Monotonic stack -42 Connect rainwater
- Solution of 300ms delay of mobile phone
- Dom4j遍历和更新XML
- Try to reprint an article about CSDN reprint
- JS ternary operator - learning notes (with cases)
- [RPC] RPC remote procedure call
- Too many open files solution
- Apache startup failed phpstudy Apache startup failed
猜你喜欢

Log4j2 vulnerability recurrence and analysis

Dom4j traverses and updates XML
![[rust notes] 02 ownership](/img/f7/74f8ea3bd697957f9ebfa3e1513fda.png)
[rust notes] 02 ownership

First Servlet

LeetCode 871. 最低加油次数

Find the combination number acwing 886 Find the combination number II

Tree DP acwing 285 A dance without a boss

Binary to decimal, decimal to binary

状态压缩DP AcWing 291. 蒙德里安的梦想

Six dimensional space (C language)
随机推荐
Talking about: is the HashSet set ordered or disordered /hashset set unique, why can we store elements with the same content
单调栈-84. 柱状图中最大的矩形
Campus lost and found platform based on SSM, source code, database script, project import and operation video tutorial, Thesis Writing Tutorial
Debug debugging - Visual Studio 2022
Unity editor expansion - draw lines
【Rust 笔记】13-迭代器(上)
Complex character + number pyramid
Analysis of Alibaba canal principle
I made mistakes that junior programmers all over the world would make, and I also made mistakes that I shouldn't have made
Notes and bugs generated during the use of h:i:s and y-m-d
C language file reading and writing
file_ put_ contents
Animation_ IK overview
Unity Editor Extension - Outline
Method of intercepting string in shell
[rust notes] 06 package and module
[rust notes] 12 closure
数位统计DP AcWing 338. 计数问题
Monotonic stack -42 Connect rainwater
Markdown learning