Questions tagged «shell-script»

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

3
在bash shell脚本中,编写对字符串值进行迭代的for循环
在bash中,我知道可以编写一个for循环,其中一些循环控制变量i在指定的整数上进行迭代。例如,我可以编写一个bash shell脚本来打印1到10之间的整数: #!/bin/bash for i in {1..10} do echo $i done 如果我提供字符串列表,是否可以替代地循环访问一个字符串的循环控制变量?例如,假设我有一个fname代表文件名的字符串。我想为每个文件名调用一组命令。例如,我可能想fname使用如下命令打印内容: #!/bin/bash for fname in {"a.txt", "b.txt", "c.txt"} do echo $fname done 换句话说,在第一次迭代中,fname应具有值fname="a.txt",而在第二次迭代中,fname应具有值fname="b.txt",依此类推。不幸的是,上述语法似乎不太正确。我想获得输出: a.txt b.txt c.txt 但是当我尝试上面的代码时,我得到以下输出: {a.txt, b.txt, c.txt} 您能否帮助我确定正确的语法,以便可以迭代地更改变量的值/内容fname?感谢您的时间。
24 bash  shell-script  for 

3
在Bash中调用subshel​​l的规则?
我似乎误解了Bash创建子shell的规则。我认为括号总会创建一个子外壳,该子外壳将作为其自身的进程运行。 但是,事实并非如此。在代码片段A(如下)中,第二条sleep命令未在单独的外壳程序中运行(由pstree另一个终端确定)。但是,在代码片段B中,第二个sleep命令确实在单独的外壳中运行。这些代码段之间的唯一区别是第二个代码段在括号内有两个命令。 有人可以解释一下创建子外壳的规则吗? 代码片段A: sleep 5 ( sleep 5 ) 代码片段B: sleep 5 ( x=1 sleep 5 )

3
文件名中的换行符
我理解并接受这样的前提,即防御性1 shell脚本既审慎又从长远来看更可持续。 在这里,许多文本处理问题的答案都遵循这一原理,将非常规文件名的意外情况纳入了答案。可能包含空格,破折号和换行符。 文件名中的换行有多普遍?特别: 默认情况下,是否有任何应用程序创建包含换行符的文件名? 是否有需要创建此类文件名的情况? 还是它们主要是用户错误的实例? [1]含义规划和管理最广泛的场景和突发事件... 这个问题是由(颇具争议的)评论引起的。

4
经过一定时间后运行命令?
如果执行的过程很长,有什么方法可以执行一些基于时间的命令? 例如,我正在运行一个非常长的过程,大约需要10分钟。 5分钟后,我想运行一个单独的命令。为了说明起见,单独的命令可以是:echo 5 minutes complete (注意:我不希望命令完成方面的进展,而只是在指定间隔后执行命令。) 可能吗?

3
多个逻辑运算符(((A || B)&& C),以及“意外令牌附近的语法错误”
我正在使用Bash 3,并且正在尝试形成条件。在C / C ++,它的死简单((A || B) && C)。在Bash中,事实并非如此(我认为Git作者必须先编写此代码,然后再进行其他工作)。 这是行不通的。注意,这<0 or 1>不是字符串文字。表示0或1(通常来自grep -i)。 A=<0 or 1> B=<0 or 1> C=<0 or 1> if [ [ "$A" -eq "0" ] || [ "$B" -ne "0" ] ] && [ "$C" -eqe "0" ]; then ... fi 结果是: line 322: syntax error …

3
差异,仅显示正确文件中的修改行
我有文件a,b并且我想输出b自从克隆以来更改的行a。仅修改的行,没有周围的上下文,没有diff偏移标记。 如何使用Shell脚本来做到这一点?(没有Python / Perl / PHP / ...) Sed和awk是可接受的解决方案。 现在,我正在使用--suppress-common-lines diff -y并使用正则表达式反向引用sed来仅在空白之后获取正确的部分。肯定有更好的办法? 使用perl(这是被禁止的),我会做这样的事情: diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
24 shell-script  sed  awk  diff 


4
以多种表达方式进行就地辩论
我正在尝试通过使用替换文件中的多个单词 sed -i #expression1 #expression2 文件 Something 123 item1 Something 456 item2 Something 768 item3 Something 353 item4 输出(所需) anything 123 stuff1 anything 456 stuff2 anything 768 stuff3 anything 353 stuff4 试用 我可以使用sed -i2次获得以下输出。 sed -i 's/Some/any/g' file sed -i 's/item/stuff/g' file 我可以用任何可能的方式使它成为单个就地命令吗? sed -i 's/Some/any/g' -i 's/item/stuff/g' file 当我尝试上述代码时,它将s/item/stuff/g作为文件并尝试对其进行处理。

3
如何通过Shell脚本检查特定端口是否在计算机上打开并基于该端口执行操作?
我在端口8080上运行c ++应用程序服务器的计算机上运行下面的Shell脚本,并且在Shell脚本中,我正在执行URL并将来自该URL的响应存储在DATA变量中。 但是,假设同一台应用服务器已关闭,则它将无法执行该URL,然后将其打印Retrying Again并休眠30秒,然后再次执行相同的URL。 #!/bin/bash HOSTNAME=$hostname DATA="" RETRY=15 echo $HOSTNAME while [ $RETRY -gt 0 ] do DATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/beat) if [ $? -eq 0 ] then break else echo "Retrying Again" >&2 # restart the server let RETRY-=1 sleep 30 fi done echo "Server is …

8
在大文件的开头和结尾添加行
我有在大文件的开头和结尾添加行的情况。 我已经尝试过如下图所示。 第一行: sed -i '1i\'"$FirstLine" $Filename 最后一行: sed -i '$ a\'"$Lastline" $Filename 但是此命令的问题在于它附加了文件的第一行并遍历整个文件。对于最后一行,它再次遍历整个文件并追加最后一行。由于文件非常大(14GB),因此需要很长时间。 如何在仅读取一次文件的同时在文件的开头添加一行,并在文件的末尾添加另一行?

7
两个标签之间的文字
我想<tr> </tr>从html文档中检索这两个标签之间的任何内容。现在,我没有任何特定的html要求可以保证html解析器。我只是简单地需要一些匹配的东西,<tr>并</tr>在两者之间获取所有内容,并且可能会有多个trs。我尝试了awk,它可以工作,但是由于某种原因,它最终给了我提取的每一行的副本。 awk ' /<TR/{p=1; s=$0} p && /<\/TR>/{print $0 FS s; s=""; p=0} p' htmlfile> newfile 怎么办呢?

1
一个systemctl命令来启动和启用
使用一个命令来启动和启用受systemctl管软件对于在一些脚本中节省几行很有用,这使它们更具美感(这不是一个问题,而是一件不错的事情)。 systemctl两者都有一个命令,start并且enable有一个受其控制的程序systemctl吗?

8
在Shell脚本中隐藏密码
如何在Shell脚本中隐藏密码?有许多脚本正在访问数据库。如果我们打开脚本,其他人也会知道用户名和密码。因此,如果有人知道如何隐藏,请告诉我。 我有一种方法:将密码放在文件中并使文件隐藏,并且没有人可以访问该文件(更改权限并在访问数据库时在脚本中使用该文件)。


6
如何从任何URL获得响应?
我被要求编写一个Shell脚本来检查我的项目的URL是否正常运行。 我试图在互联网上找到一些提示,但是我得到的只是关于检查URL是否存在的提示。 我首先尝试过wget。 wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^ /' if [ $? -ne 0 ] then echo "Server is UP" else echo "Server is down" fi 我的下一个尝试是curl。 curl -ivs https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html# if [ $? -ne 0 ] then echo "Server is UP" else echo "Server is down" fi …

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.