Questions tagged «shell»

Shell是Unix的命令行界面。您可以交互地在外壳程序中键入命令,也可以编写脚本来自动执行任务。使用此标记可解决适用于/ bin / sh和大多数兼容shell(ash,bash,ksh,zsh等)的问题。对于有错误的Shell脚本,请在此处发布之前在http://shellcheck.net中对其进行检查。

5
如何检测到getopts没有传递任何选项?
我有此代码- #getoptDemo.sh usage() { echo "usage: <command> options:<w|l|h>" } while getopts wlh: option do case $option in (w) name='1';; (l) name='2';; (h) name='3';; (*) usage exit;; esac done print 'hi'$name 当我运行时bash getoptDemos.sh(不带选项),它将打印hi而不是调用函数usage。当给出w,h和l以外的选项时,它将调用用法。然后,如果未指定任何选项,它将无法正常工作。 我已经尝试使用?,\?,:到位的*,但我无法实现我想要的。我的意思是所有的docs上getopt说它使用?。 我究竟做错了什么?
19 bash  shell  options  getopts 

4
运行chsh不会更改外壳
我想将我的shell从bash更改为zsh。 我尝试以zol用户身份登录时运行以下命令: $ chsh -s /bin/zsh $ sudo chsh -s /bin/zsh zol $ su -c 'chsh -s /bin/zsh zol' # The above all results with: $ password: $ chsh: Shell not changed. # zsh exists in /etc/shells.. chsh -l /bin/sh /bin/bash /sbin/nologin /bin/zsh 有什么事吗 我该如何解决?
19 shell  zsh  users 

2
-q肯定会关闭wget输出日志记录吗?
我目前在Linux服务器上运行一个Shell脚本,该服务器正在oder中使用wget下载远程网页。这又由计划在特定时间运行的cron作业执行。 有人可以确认添加该-q选项不仅可以停止将所有输出返回到控制台,还可以停止wget写入日志或尝试创建日志文件的所有尝试?
19 linux  shell  wget 


2
环境变量中单引号和双引号的意义是什么?
我在.profile中定义了一些环境变量,如下所示: MY_HOME="/home/my_user" 但是除非我去除引号并重新获取文件,否则该变量似乎不会求值。我相信,如果有空格,则必须使用引号;如果不希望使用转义符,则使用单引号。有人可以澄清变量定义中单引号和双引号的重要性吗?前叉和后叉怎么样?


2
从sh文件运行时,Shell脚本会引发未找到的错误。但是,如果手动输入,则命令有效
我正在尝试使用以下脚本为我的网站生成一个站点地图。当我运行它时,sh thsitemap.sh出现这样的错误并创建一个空的sitemap.xml文件: thsitemap.sh: 22: thsitemap.sh: [[: not found thsitemap.sh: 42: thsitemap.sh: [[: not found thsitemap.sh: 50: thsitemap.sh: Syntax error: "(" unexpected 但是作为同一用户,root当我在终端上手动复制并粘贴这些行时,它可以正常工作而没有任何错误,并且sitemap.xml文件具有所有url。有什么问题?我怎样才能解决这个问题? #!/bin/bash ############################################## # modified version of original http://media-glass.es/ghost-sitemaps/ # for ghost.centminmod.com # http://ghost.centminmod.com/ghost-sitemap-generator/ ############################################## url="techhamlet.com" webroot='/home/leafh8kfns/techhamlet.com' path="${webroot}/sitemap.xml" user='leafh8kfns' # web server user group='leafh8kfns' # web server group debug='n' …


3
如何在bash脚本中创建一个新的空文件?
我正在运行一些第三方Perl脚本,编写该脚本时需要输出标记为的输出文件-o。 不幸的是,脚本似乎需要一个实际的文件,也就是说,用户必须创建一个filename.txt0字节的空文件,然后在脚本命令行上输入该空文件。 perl script1.pl -o filename.txt 问题:如何在bash脚本中创建一个空文件?如果只是尝试perl script1.pl -o filename.txt,脚本会给出一个错误,指出该文件不存在。

3
从bash shell脚本循环访问数组索引变量?
我想在bash shell脚本中循环访问数组时访问数组索引变量。 myscript.sh #!/bin/bash AR=('foo' 'bar' 'baz' 'bat') for i in ${AR[*]}; do echo $i done 上面脚本的结果是: foo bar baz bat 我寻求的结果是: 0 1 2 3 如何更改脚本以实现此目的?

1
为什么$ {$#}在shell中返回与$$相同的结果?
在尝试设置最后一个位置参数时/bin/dash,我已经尝试过了echo ${$#}。出人意料的是,这不会导致错误,但会导致PID与$$变量内容相同。问题,为什么该语法起作用?shell在这里应用的语法规则是什么? 基本上,我所做的是 $ set 1 2 3 4 5 $ echo ${$#} 13819 $ echo $$ 13819 显然,%在这种结构中字符也被忽略 $ echo ${$%} 13819 但是*并@导致不良的替换错误: $ echo ${$*} sh: 10: Bad substitution $ echo ${$@} sh: 11: Bad substitution
18 shell  variable 

2
为什么POSIX要求某些Shell内置程序具有外部实现?
从这个关于printf是否是yash内置的问题开始,这个答案引用了POSIX标准。 答案指出,POSIX搜索序列是查找所需命令的外部实现,然后,如果外壳将其实现为内置程序,则运行内置程序。(对于不是特殊内置的内置。) 为什么POSIX在允许运行内部实现之前对存在外部实现有此要求? 似乎……随心所欲,所以我很好奇。


1
bash根据“ IFS”变量的值更改其行为
当我将IFS变量设置为一个空格时,bash将多个空格视为一个空格(这myprogram是一个打印收到的命令行参数的程序): IFS=" " x="hello hi world" ./myprogram $x argv[1] = hello argv[2] = hi argv[3] = world 但是,当我将IFS变量设置为逗号时,bash不要将多个逗号视为一个逗号: IFS="," x="hello,,,hi,,,world" ./myprogram $x argv[1] = hello argv[2] = argv[3] = argv[4] = hi argv[5] = argv[6] = argv[7] = world 这是为什么?
18 bash  shell 

4
“运行任何将不可信数据传递给将参数解释为命令的命令的命令”
从findutils的手册中: 例如这两个命令的构造 # risky find -exec sh -c "something {}" \; find -execdir sh -c "something {}" \; 非常危险 这样做的原因是将'{}'扩展为一个文件名,该文件名可能包含分号或外壳程序专用的其他字符。例如,如果有人创建了文件, /tmp/foo; rm -rf $HOME则上面的两个命令可能会删除某人的主目录。 因此,由于这个原因,请勿运行任何将不可信数据(例如文件名)传递给将参数解释为要进一步解释的命令的命令(例如“ sh”)的命令。 对于shell,有一个解决此问题的聪明方法: # safer find -exec sh -c 'something "$@"' sh {} \; find -execdir sh -c 'something "$@"' sh {} \; 这种方法不能保证避免所有问题,但是比将攻击者选择的数据替换为shell命令的文本要安全得多。 问题的原因是否在于find -exec …
18 shell 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.