Questions tagged «shell-script»

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

2
Shell命令/脚本,看主机是否还活着?
我试图找出更多方法来查看给定主机是否正常运行,仅使用shell命令(主要是bash)即可。理想情况下,它将能够同时使用主机名和IP地址。现在,我知道的唯一本地方法是ping,也许可以将其集成到此处描述的脚本中。还有其他想法吗?

5
非交互式脚本中的sudo
我有一个执行三个功能的脚本:A && B && C。 功能B需要运行一个超级用户,而A并C没有。 我有几种解决方案,但都不令人满意: sudo整个脚本: sudo 'A && B && C' 如果不需要A,C以超级用户身份运行似乎是个坏主意 使脚本具有交互性: A && sudo B && C 我可能必须输入密码,但是我希望脚本是非交互式的,因为每个功能可能要花一些时间,并且我不希望脚本等待我。好吧,这也是为什么它首先是脚本的原因,所以我不必看着它运行。 愚蠢的解决方案: sudo : && A && sudo -n B && C 首先,先执行无操作操作似乎很愚蠢sudo,而且我还必须交叉指责A不会花更多的钱$sudo_timeout。 假设的解决方案(希望您告诉我它的存在): sudo --store-cred 'A && sudo --use-cred-from-parent-sudo B && C' 这会在一开始提示您输入密码,然后仅在需要时使用该凭据。 您对这一切有何看法?对于这个问题没有解决方案,我感到非常惊讶,因为我认为这是一个非常普遍的问题(关于make all && sudo …

1
bashscript检测右箭头键被按下
为什么即使键码不是右箭头键,它也总是检测为true? stty_state=`stty -g` stty raw; stty -echo keycode=`dd bs=1 count=1 2>/dev/null` stty "$stty_state" echo $keycode if [ "$keycode"=39 ]; then echo "Right Arrow Key Pressed!" fi

8
行的开头或中间的模式的Grep
我首先要说的是,我认为这个问题比听起来听起来要简单得多。 我需要做的是:检查PATH环境变量中的文件夹。可能在开始时或之后。我只需要验证该文件夹在那里。 我的问题的例子-让我们使用/opt/gnome。 场景1:文件夹不在PATH的开头 # echo "$PATH" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome # echo "$PATH" | grep ":/opt/gnome" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome 请注意,grep必须足够具体,以使其不会被捕获/var/opt/gnome。因此冒号。 场景2:文件夹位于PATH的开头。 # echo "$PATH" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome # echo "$PATH" | grep "^/opt/gnome" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome 这是我的问题-我需要使用此文件夹搜索冒号或行首。我想做的是以下两个括号表达式之一: # echo $PATH | grep "[^:]/opt/gnome" # echo $PATH | grep "[:^]/opt/gnome" 但是[^并[:有自己的含义。因此,以上两个命令不起作用。 有没有一种方法可以在一个命令中针对这两种情况进行grep?

3
Dash等效于脚本输出的自我重定向
在Bash中,您可以重定向当前正在运行的脚本的所有将来的 stdout输出。例如,使用此脚本, exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3 这将以syslog结尾: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3 但这是特定于Bash的,具有重定向的裸露的exec在Dash中似乎不起作用。 Syntax error: redirection unexpected 如何在Dash中或在两个Shell中使其工作?

4
意外的EOF和语法错误
我目前正在编写我的第三个Shell脚本,但遇到了问题。到目前为止,这是我的脚本: #!/bin/bash echo "choose one of the following options : \ 1) display all current users \ 2) list all files \ 3) show calendar \ 4) exit script" while read do case in 1) who;; 2) ls -a;; 3) cal;; 4) exit;; esac done 当我尝试运行脚本时,它说: line2 : unexpected EOF …

1
bash脚本中的多线程/分叉
我写了一个bash脚本,格式如下: #!/bin/bash start=$(date +%s) inFile="input.txt" outFile="output.csv" rm -f $inFile $outFile while read line do -- Block of Commands done < "$inFile" end=$(date +%s) runtime=$((end-start)) echo "Program has finished execution in $runtime seconds." 该while循环将从读取$inFile,上线执行一些活动和转储结果$outFile。 由于$inFile3500+行长,因此脚本需要6-7个小时才能完全执行。为了减少此时间,我计划在此脚本中使用多线程或分叉。如果我创建8个子进程,$inFile则将同时处理其中的8行。 如何才能做到这一点?


4
如何从管道读取用户输入?
假设我有一个文件confirmation.sh,其内容如下: #!/bin/bash echo -n "Are you sure [Y/n]? " read line case "$line" in n|N) echo "smth" ;; y|Y) echo "smth" ;; esac 并且我想通过以下方式运行此脚本: cat confirmation.sh | sh 我看到Are you sure [Y/n]?了,脚本被打断了。有什么问题?



2
在bash脚本中运行时,“历史记录”停止工作
我正在编写一个简单的脚本来grep我的bash历史记录以查找特定的字符串。在命令行上,我可以执行以下操作,效果很好: history | grep git 但是,当我使用与上述相同的命令创建bash脚本时,突然不history返回任何内容: #!/bin/bash history | grep git 当我删除第一行时#!/bin/bash,我的脚本再次起作用。这是怎么回事 如何history在bash脚本中使用?


5
连接具有唯一标识符的两个文件
我要加入两个文件,分别有大约12900和4400个条目。这些文件包含全球所有陆基气象观测站的位置信息。最大的文件每两周更新一次,较小的文件大约一年一次。原始文件可以在这里找到(http://www.wmo.int/pages/prog/www/ois/volume-a/vola-home.htm和 http://weather.rap.ucar.edu/surface/ station.txt)。我已经使用一些混合的awk,sed和bash脚本来操纵我的文件。我使用GEMPAK软件包使用这些文件来可视化数据,该软件包可从Unidata免费获得。最大的文件将与GEMPAK一起使用,但不能完全发挥作用。为此,需要一个联接。 文件1包含气象站的位置信息,其中前6位数字是唯一的站标识符。不同的参数(站号,站名,国家/地区代码,纬度和站高)仅由其在行中的位置定义,即没有制表符。 060090 AKRABERG FYR DN 6138 -666 101 060100 VAGA FLOGHAVN DN 6205 -728 88 060110 TORSHAVN DN 6201 -675 55 060120 KIRKJA DN 6231 -631 55 060130 KLAKSVIK HELIPORT DN 6221 -656 75 060160 HORNS REV A DN 5550 786 21 060170 HORNS REV B DN …


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.