关于getopts命令的使用
-
- 帖子: 8
- 注册时间: 2011-10-25 22:08
关于getopts命令的使用
看了不少网上的教程 基本都是一样的
现在有几个问题想问下大家
1)这个命令一定用while循环么 它是怎么结束的
2)假如我运行 1.sh -v f1 f2 ,那么f1 f2这两个参数保存在哪?
3)我得到参数v 想执行某个命令 是不是直接在v)后面写
如果我想运行 1.sh f1 f2 没有-参数运行其他命令又要加一些什么东西?
while getopts vn: c
do
case $c in
v)
;;
esac
done;
现在有几个问题想问下大家
1)这个命令一定用while循环么 它是怎么结束的
2)假如我运行 1.sh -v f1 f2 ,那么f1 f2这两个参数保存在哪?
3)我得到参数v 想执行某个命令 是不是直接在v)后面写
如果我想运行 1.sh f1 f2 没有-参数运行其他命令又要加一些什么东西?
while getopts vn: c
do
case $c in
v)
;;
esac
done;
-
- 帖子: 8
- 注册时间: 2011-10-25 22:08
Re: 关于getopts命令的使用
有没有人说一下啊 哪怕就1条也行啊 谢谢了
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 关于getopts命令的使用
代码: 全选
man getopt
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 8
- 注册时间: 2011-10-25 22:08
Re: 关于getopts命令的使用
没有getopts的手册页条目lilydjwg 写了:代码: 全选
man getopt
-
- 帖子: 8
- 注册时间: 2011-10-25 22:08
Re: 关于getopts命令的使用
但是我们作业必须要用getoptseexpress 写了:bash类,不适合做复杂的事情的。
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 关于getopts命令的使用
-
- 帖子: 8
- 注册时间: 2011-10-25 22:08
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 关于getopts命令的使用
pacman 是 ArchLinux 的包管理器。我使用包管理器查得 getopts 的 man 文档位于 man-pages 这个包中。
PS: 你使用 Cygwin 学习 Linux 命令?鉴于你是 Windows 用户,我可以理解你能忍受 Cygwin 的低执行效率(我觉得主要是因为 Unix 倾向于使用多进程而 Windows 的进程创建太慢),但我要告诉你:最好不要用 Cygwin 做这种事,因为它是有 bug 的,比如 ssh 使用的流是文本模式的操作,比如正在使用中的文件不能被删除,比如文件名不区分大小写。如果不想装 Linux 系统的话,建议使用虚拟机或者远程登录。
另外,有兴趣研究 Windows 上使用类 Unix 命令的可以帮忙看看这个 SFU( http://www.microsoft.com/download/en/de ... =en&id=274 )。我这里 VBox 不给力安装过程中总是崩溃。。。。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 关于getopts命令的使用
#一个例子:
while getopts ":f:d:rh" optname
do
case "$optname" in
"h")
echo -e $vg_echo|more
echo
exit 0
;;
"f")
env_word_file=$OPTARG
echo "单词文本=$env_word_file"
;;
"d")
vg_wave_directory=$OPTARG
echo "wav文件地址=$vg_wave_directory"
;;
"r")
echo "删除配置文件?y/n"
read -n1 vg_read
if [[ $vg_read = "y" ]];then
echo
if [[ -f ~/$vg_configuration_file ]];then
rm ~/$vg_configuration_file && echo "已删除$vg_configuration_file配置文件。"
else
echo "无配置文件。"
fi
exit 0
fi
;;
"?")
echo "未知选项? "$OPTARG
exit 1
;;
":")
echo "选项 "$OPTARG" 缺参数!"
exit 1
;;
"*")
echo "发生未知错误!"
exit 1
;;
esac
done
#很好的教程:
http://www.ibm.com/developerworks/cn/li ... eters.html
#看这部分: 选项和 getopts
while getopts ":f:d:rh" optname
do
case "$optname" in
"h")
echo -e $vg_echo|more
echo
exit 0
;;
"f")
env_word_file=$OPTARG
echo "单词文本=$env_word_file"
;;
"d")
vg_wave_directory=$OPTARG
echo "wav文件地址=$vg_wave_directory"
;;
"r")
echo "删除配置文件?y/n"
read -n1 vg_read
if [[ $vg_read = "y" ]];then
echo
if [[ -f ~/$vg_configuration_file ]];then
rm ~/$vg_configuration_file && echo "已删除$vg_configuration_file配置文件。"
else
echo "无配置文件。"
fi
exit 0
fi
;;
"?")
echo "未知选项? "$OPTARG
exit 1
;;
":")
echo "选项 "$OPTARG" 缺参数!"
exit 1
;;
"*")
echo "发生未知错误!"
exit 1
;;
esac
done
#很好的教程:
http://www.ibm.com/developerworks/cn/li ... eters.html
#看这部分: 选项和 getopts
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- adam8157
- 帖子: 2794
- 注册时间: 2009-03-05 16:31
- 联系:
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 关于getopts命令的使用
#教程没这么详细的,就说两句:xjx0524 写了:看了不少网上的教程 基本都是一样的
现在有几个问题想问下大家
1)这个命令一定用while循环么 它是怎么结束的
2)假如我运行 1.sh -v f1 f2 ,那么f1 f2这两个参数保存在哪?
3)我得到参数v 想执行某个命令 是不是直接在v)后面写
如果我想运行 1.sh f1 f2 没有-参数运行其他命令又要加一些什么东西?
while getopts vn: c
do
case $c in
v)
;;
esac
done;
1.getopts返回true或false,所以用while循环。
2.f1 f2 在$* 和$@ (所有参数在$*和 $@,不管有没有-)
3.是
#getopts不管无-的参数,在$@中找,或用$1,$2...
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 8
- 注册时间: 2011-10-25 22:08
Re: 关于getopts命令的使用
前一阵忙期中考试 这个就没在看 现在我还有几个问题
1)怎么判断有没有-参数 因为作业要求实行的命令有的带 有的不带
2)后面带冒号的可以接参数 存在OPTARG里 那要是想接两个参数呢?
3)怎么实现 命令是 x.sh -数字 脚本里用那个数字操作 就像head tail那样
1)怎么判断有没有-参数 因为作业要求实行的命令有的带 有的不带
2)后面带冒号的可以接参数 存在OPTARG里 那要是想接两个参数呢?
3)怎么实现 命令是 x.sh -数字 脚本里用那个数字操作 就像head tail那样
fnan 写了:#教程没这么详细的,就说两句:xjx0524 写了:看了不少网上的教程 基本都是一样的
现在有几个问题想问下大家
1)这个命令一定用while循环么 它是怎么结束的
2)假如我运行 1.sh -v f1 f2 ,那么f1 f2这两个参数保存在哪?
3)我得到参数v 想执行某个命令 是不是直接在v)后面写
如果我想运行 1.sh f1 f2 没有-参数运行其他命令又要加一些什么东西?
while getopts vn: c
do
case $c in
v)
;;
esac
done;
1.getopts返回true或false,所以用while循环。
2.f1 f2 在$* 和$@ (所有参数在$*和 $@,不管有没有-)
3.是
#getopts不管无-的参数,在$@中找,或用$1,$2...
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 关于getopts命令的使用
#参数的话只要getopts,$@,shift三板斧就差不多了:
kose3@kose3-laptop:~$ cat tmp1.sh
#!/bin/bash
while getopts "f:n:h" optname
do
echo "选项参数:-$optname $OPTARG"
done
echo "**********************"
shift $(($OPTIND-1))
for i in "$@"
do
echo "非选项参数:$i"
done
kose3@kose3-laptop:~$ ./tmp1.sh -f f1 -f fx -n 123 -h f2 f3
选项参数:-f f1
选项参数:-f fx
选项参数:-n 123
选项参数:-h
**********************
非选项参数:f2
非选项参数:f3
kose3@kose3-laptop:~$
#不如用 -n 数字 形式,或者用非选项参数,直接写数字。3)怎么实现 命令是 x.sh -数字 脚本里用那个数字操作 就像head tail那样
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系: