当前位置:网站首页>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
边栏推荐
- Parameters of convolutional neural network
- PHP uses foreach to get a value in a two-dimensional associative array (with instances)
- Six dimensional space (C language)
- cres
- Binary tree sorting (C language, char type)
- Log4j2 vulnerability recurrence and analysis
- 22-06-28 Xi'an redis (02) persistence mechanism, entry, transaction control, master-slave replication mechanism
- How to place the parameters of the controller in the view after encountering the input textarea tag in the TP framework
- 20220630学习打卡
- 【Rust 笔记】10-操作符重载
猜你喜欢

我们有个共同的名字,XX工

TP5 multi condition sorting

Markdown learning

SQL statement error of common bug caused by Excel cell content that is not paid attention to for a long time

【Rust笔记】02-所有权

Really explain the five data structures of redis

Phpstudy 80 port occupied W10 system

Six dimensional space (C language)

Alibaba canal actual combat
![[RPC] RPC remote procedure call](/img/dc/872204ea47fcff04cdb72e18a2a4ef.jpg)
[RPC] RPC remote procedure call
随机推荐
Concurrent programming (V) detailed explanation of atomic and unsafe magic classes
On the setting of global variable position in C language
樹形DP AcWing 285. 沒有上司的舞會
[concurrent programming] atomic operation CAS
【Rust 笔记】11-实用特型
Too many open files solution
Arbre DP acwing 285. Un bal sans patron.
cres
Final review of Database Principles
[rust notes] 08 enumeration and mode
单调栈-42. 接雨水
Unity interactive water ripple post-treatment
URL backup 1
SQL statement error of common bug caused by Excel cell content that is not paid attention to for a long time
数位统计DP AcWing 338. 计数问题
Find the intersection of line segments
PHP function date (), y-m-d h:i:s in English case
20220630 learning clock in
【Rust 笔记】12-闭包
二进制转十进制,十进制转二进制