Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。


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' …

6
如何检查文件系统是否已通过脚本安装
我是脚本新手,我可以做一些非常基础的事情,但是现在我需要帮助。 我有一个本地文件系统,仅在需要执行备份时才会挂载。 我从这个开始。 #!/bin/bash export MOUNT=/myfilesystem if grep -qs $MOUNT /proc/mounts; then echo "It's mounted." else echo "It's not mounted."; then mount $MOUNT; fi 如我所说,我在脚本编写方面非常基础。听说您可以mount通过查看返回码来检查命令的状态。 RETURN CODES mount has the following return codes (the bits can be ORed): 0 success 1 incorrect invocation or permissions 2 system error (out of …

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 如何更改脚本以实现此目的?

5
如何仅获取端口3000上运行的进程的PID,而没有任何其他信息?
我正在使用CentOS7。我想获取在端口3000上运行的进程的PID(如果存在)。我想要获取此PID的目的是将其保存到Shell脚本中的变量中。到目前为止,我有 [rails@server proddir]$ sudo ss -lptn 'sport = :3000' State Recv-Q Send-Q Local Address:Port Peer Address:Port Cannot open netlink socket: Protocol not supported LISTEN 0 0 *:3000 *:* users:(("ruby",pid=4861,fd=7),("ruby",pid=4857,fd=7),("ruby",pid=4855,fd=7),("ruby",pid=4851,fd=7),("ruby",pid=4843,fd=7)) 但是我无法弄清楚如何在没有所有这些额外信息的情况下单独隔离PID。

5
如何对具有major.minor.patch级别的列表进行排序,有时还可以正确地对rc进行排序?
我必须使用shell脚本对以下列表进行排序,并使最新版本显示在底部或顶部。我将如何仅使用Shell工具来做到这一点? release-5.0.0.rc1 release-5.0.0.rc2 release-5.0.0 release-5.0.1 release-5.0.10 release-5.0.11 release-5.0.13 release-5.0.14 release-5.0.15 release-5.0.16 release-5.0.17 release-5.0.18 release-5.0.19 release-5.0.2 release-5.0.20 release-5.0.21 release-5.0.22 release-5.0.23 release-5.0.24 release-5.0.25 release-5.0.26 release-5.0.27 release-5.0.28 release-5.0.29 release-5.0.3
18 shell-script  awk  sed  python  sort 

4
符合checkbashisms的方法来确定当前shell
在我的文章中.profile,我使用以下代码来确保仅在登录shell实际上是Bash时才获得与Bash相关的别名和函数: # If the current (login) shell is Bash, then if [ "${BASH_VERSION:-}" ]; then # source ~/.bashrc if it exists. if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 我目前正在将我的shell配置文件,脚本和函数置于版本控制之下。我也最近开始去除shell脚本不从击的特定功能中受益,如休闲bash化,更换的过程中function funcname()有funcname()。 对于我的shell文件存储库,我已经配置了一个预提交钩子,该存储库中的每个文件都运行checkbashismsDebian的devscripts包中的实用程序,sh以确保我不会无意中引入Bash特定的语法。但是,这给我带来了一个错误.profile: possible bashism in .profile line 51 ($BASH_SOMETHING): if [ "${BASH_VERSION:-}" ]; then 我想知道是否有一种方法可以检查正在运行的shell,而不会触发checkbashisms。 我检查了POSIX列出的与外壳相关的变量的列表,希望它们中的一个可以用来显示当前的外壳。我还查看了在交互式Dash shell中设置的变量,但是,再次找不到合适的候选对象。 目前,我已经排除.profile因被处理checkbashisms; …

6
执行时是否应将变量加引号?
Shell脚本编写的一般规则是,除非有明显的理由,否则应始终对变量加引号。要获得比您可能想知道的更多的详细信息,请查看以下精彩问答:忘记在bash / POSIX shell中引用变量的安全隐患。 但是,请考虑以下功能: run_this(){ $@ } 是否应该$@在那儿引用?我玩了一段时间,找不到引号不足引起问题的情况。另一方面,使用引号会使传递包含空格作为引号变量的命令时中断: #!/usr/bin/sh set -x run_this(){ $@ } run_that(){ "$@" } comm="ls -l" run_this "$comm" run_that "$comm" 运行上面的脚本将返回: $ a.sh + comm='ls -l' + run_this 'ls -l' + ls -l total 8 -rw-r--r-- 1 terdon users 0 Dec 22 12:58 da -rw-r--r-- 1 …


2
命令末尾的“&”如何使脚本如此快?
在在线解决CTF挑战时,遇到了需要暴力破解服务器的情况。这是我写的代码: #!/bin/bash for i in {0..9}{0..9}{0..9}{0..9} do echo "Now trying code.." echo $i echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt done 这是令人难以置信的,痛苦的缓慢。我需要尝试从1000到9999的组合,每10次尝试大约需要5秒钟。然后,按照建议,在此行的末尾添加一个“&”: echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt & 并且,它在几秒钟内尝试了数百种组合。我很惊讶。有人可以向我解释逻辑吗?“&”是做什么的?

1
重新启动计算机后如何继续执行脚本?
我正在用bash写一个shell脚本。在脚本中的某个时刻,它检测到机器需要重新启动才能继续。它发出: sudo reboot 当计算机重新启动时,此脚本需要做更多的工作。如何配置某些内容以继续执行此脚本中的工作? 我假设有一些地方可以写一个shell脚本,以便它将在下次重新启动时执行。这样的地方在哪里?我看到cron有一个@reboot指令。我也知道Apache之类的服务是由upstart在启动时启动的。这两个都是合适的机制吗?如果是这样,它将如何被触发? 该脚本仅需要运行一次,而无需每次重新启动。因此,它必须移至仅在下次重新启动时运行的某个位置,或者一旦运行即可将其自身删除。 该问题询问有关重新启动后如何保存应用程序状态的信息。我的脚本没有太多状态,因此我可以进行管理。我只需要知道如何让此脚本在下次重新启动后触发某些程序即可运行。 我的特定版本是Ubuntu Linux 14.04。原始脚本由系统管理员在命令行中启动(与从cron运行相反)。


2
如何使用管道组成bash函数?
我用这种方式定义的功能很少: function f { read and process $1 ... echo $result } 我想将它们组合在一起,以便调用看起来像f | g | h。 我应该使用哪种惯用法将用于参数的函数转换为从stdin读取参数的函数?是否可以从流中读取成对的参数元组而无需将其转义(例如,空终止)?

2
shell变量的扩展以及glob的影响和拆分
这篇文章实际上包含两个独立的问题,但我认为将它们组合在一起将提供更多的上下文。我已经在变量引号上讨论了这个问题,但我不太了解变量扩展首先是什么意思。所以我的第一个问题是: 在unix / linux中,变量扩展是什么? 我的问题的第二部分涉及以下术语: 球状 分裂 以上是什么意思,它们如何影响变量扩展?原始问题的答案提到以下内容: 将没有引号(在列表上下文中)视为split + glob运算符。 好像echo $ test是echo glob(split(“ $ test”))一样。 我找不到任何直接解决“ 遍历和分裂 ”概念的答案,而是直接将这些术语用于回答其他问题,例如最近的问题。

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.