当前位置:网站首页>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
边栏推荐
- Slice and index of array with data type
- 22-05-26 Xi'an interview question (01) preparation
- 我们有个共同的名字,XX工
- Message queue for interprocess communication
- Facial expression recognition based on pytorch convolution -- graduation project
- The method for win10 system to enter the control panel is as follows:
- Unity editor expansion - window, sub window, menu, right-click menu (context menu)
- Convert video to GIF
- [rust notes] 09- special types and generics
- Collection interface
猜你喜欢
[redis] redis persistent RDB vs AOF (source code)
TP5 multi condition sorting
求组合数 AcWing 886. 求组合数 II
Unity editor expansion - scrolling list
MySQL three logs
Monotonic stack -503 Next bigger Element II
I made mistakes that junior programmers all over the world would make, and I also made mistakes that I shouldn't have made
PHP uses foreach to get a value in a two-dimensional associative array (with instances)
Format - C language project sub file
Try to reprint an article about CSDN reprint
随机推荐
DOM 渲染系统(render mount patch)响应式系统
Apache startup failed phpstudy Apache startup failed
How to delete CSDN after sending a wrong blog? How to operate quickly
Drawing maze EasyX library with recursive backtracking method
Campus lost and found platform based on SSM, source code, database script, project import and operation video tutorial, Thesis Writing Tutorial
单调栈-503. 下一个更大元素 II
Deeply understand the underlying data structure of MySQL index
How to deal with the core task delay caused by insufficient data warehouse resources
Analysis of Alibaba canal principle
22-05-26 Xi'an interview question (01) preparation
Markdown learning
Mortgage Calculator
单调栈-84. 柱状图中最大的矩形
Alibaba canal actual combat
[concurrent programming] explicit lock and AQS
【Rust 笔记】12-闭包
Six dimensional space (C language)
记忆化搜索 AcWing 901. 滑雪
【Rust笔记】06-包和模块
Gaussian elimination acwing 883 Gauss elimination for solving linear equations