Questions tagged «shell-script»

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

2
日期-1901年之前的年份被视为无效
我的系统上安装了date(GNU coreutils)7.1。 如果我尝试检查1901年12月14日之前的日期,则会收到“无效日期”错误。例如, $ date -d 1901-12-13 date: invalid date `1901-12-13' $ date -d 1901-12-14 Sat Dec 14 00:00:00 EST 1901 我该怎么做才能使该date实用程序在1901年之前被视为有效? 对于2038年1月19日之后的日期,我也会收到类似的错误

1
如何制作将输出发送到进程的shell脚本
我目前正在屏幕上运行服务器控制台程序,因为我既需要阅读它,也需要偶尔发送命令。 我想在后台将应用程序作为守护程序运行(使用init启动/停止)。 我可以tail -f记录日志,但是那不能让我向过程发送输入。 有什么方法可以进行设置,以便我既可以读取也可以发送输入,但仍在后台运行它? 我还希望能够从不同的进程向守护程序发送输入(例如,可以发送“ Stop \ n”命令的shell脚本)。

3
Shell脚本:使用内部选项创建变量
我有一个带有以下参数的rsync命令: rsync -avz --{partial,stats,delete,exclude=".*"} 我想将该参数放在变量中以在脚本中重用。像这样: #!/bin/bash VAR=rsync -avz --{partial,stats,delete,exclude=".*"} $VAR /dir1 /dir2 我尝试使用引号,单引号,方括号,但未成功。

3
$ HOME / bin目录不在$ PATH上
在我~/.profile的最后一个代码块中,应该这样加载我的个人代码bin/ directory: # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi 但它似乎未加载: echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 为什么这不起作用?(我的shell是bash。) 编辑跳跳虎 echo $0 => bash echo $HOME => /home/student whoami => student less /etc/*-release => PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" …

3
BASH和回车行为
我有一个简单的问题。 bash(我使用的是4.4.11)显示的行/文本以纯文本分隔/结尾是否正常\r? 我对这种行为感到有些惊讶: $ a=$(printf "hello\ragain\rgeorge\r\n") $ echo "$a" george 但是“ hello again”文本仍然存在,以某种方式“隐藏”: $ echo "$a" |od -w32 -t x1c 0000000 68 65 6c 6c 6f 0d 61 67 61 69 6e 0d 67 65 6f 72 67 65 0d 0a h e l l o \r a g a …

2
Shell脚本来源的文件扩展名的官方标准/约定
我想知道是否要为要而不是运行的shell脚本提供文件类型扩展名的约定。例如: 如果我想在子shell中运行此脚本。 ./script.sh 如果我想记住从当前shell运行此脚本。 . script.source 在第二个示例中,文件类型是否有约定(例如POSIX)?像.source还是.sourceme? 更新资料 这个问题不问任何意见。我明确指出,我想知道这种脚本是否存在标准化文件扩展名。与在类似问题上广为接受的问题(对于bash脚本使用.sh或.bash扩展名?)相比,该问题甚至更少基于观点。

2
计算bash数组中元素的数目,其中数组名称是动态的(即存储在变量中)
问题的简要说明: 是否有内置的bash方法来计算bash数组中元素的数量,而该数组的名称是动态的(即存储在变量中),而无需求助于对该数组的完全复制或使用eval? 更多信息: 使用bash参数替换,可以执行以下操作: 确定数组的长度: myArr=(A B C); echo ${#myArr[@]}。 通过名称间接引用变量:( NAME=myVar; echo ${!NAME}这也适用于数组元素): NAME=myArr[1]; echo ${!NAME} 但是,如果数组的名称存储在另一个变量中,那么如何确定数组中元素的数量呢?(可以将其视为上述两个参数替换的组合。)例如: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What is the right way? 以下是所有失败的多次尝试: # Setup …

4
如何将使用find找到的文件内容归类到单个文件中?
我设法通过重新格式化保存有价值数据的分区来拍摄自己的痛处(真的很糟)。当然,这不是故意的,但它确实发生了。 但是,我设法使用testdisk和photorec恢复了大多数数据。现在,我将所有数据分发到了近25,000个目录中。大多数文件是.txt文件,其余文件是图像文件。每个目录中有300多个.txt文件。 我可以grep或用来find从.txt文件中提取某些字符串,然后将它们输出到文件中。例如,这是我用来验证数据是否在恢复的文件中的一行: find ./recup*/ -name '*.txt' -print | xargs grep -i "searchPattern" 我可以将“ searchPattern”输出到文件,但这只是给了我这种模式。这是我真正想要完成的工作: 浏览所有文件并查找特定的字符串。如果在文件中找到该字符串,则将该文件的所有内容分类为输出文件。如果在多个文件中找到该模式,则将后续文件的内容附加到该输出文件。请注意,我只是不想输出要搜索的模式,而是要在其中找到模式的文件的所有内容。 我认为这是可行的,但我只是不知道在从文件中复制特定模式后如何获取文件的所有内容。

4
测试Shell脚本中telnet端口是否处于活动状态
我正在尝试创建一个脚本来测试是否可以通过telnet登录。我不想真正登录;因此,不需要期望。我只想查看是否能够获得登录提示。这是从Linux系统完成的,所以我一直在尝试使用nc: nc 192.168.10.5 23 -w 1 | grep -q login if [ $? -eq 1 ] then echo "console is down" fi 问题是这导致我的控制台锁定。似乎-w并没有真正取消连接。 我也尝试使用telnet,但无法从脚本内断开连接。试 \echo "\035" | telnet 192.168.10.5 在收到登录提示之前中断。

4
Bash,如何让某些后台进程运行但等待其他进程?
我有(又)其他wait, &,&&控制流的问题.. 假设我有一个类似这样的脚本,我想在同一时间做更多的工作: # may take some hours something InputA > IrrelevantA & something InputB > IrrelevantB & # may take an hour ( somethingElse InputA > OutputA & somethingElse InputB > OutputB & )&& combine OutputA OutputB > Result ...morestuff 问题1:在脚本中,是否在两个进程继续执行的同时combine等待两个somethingElse进程完成something? 问题2:如果不是-我怀疑不是-我如何combine只等待两个somethingElse进程,而something上述进程仍在后台继续工作?

7
$ 0是否总是包含脚本的路径?
我想grep当前脚本,以便可以从顶部的注释部分打印出帮助和版本信息。 我在想这样的事情: grep '^#h ' -- "$0" | sed -e 's/#h //' 但是后来我想知道,如果脚本位于PATH中的目录中并且在未显式指定目录的情况下调用该脚本,将会发生什么情况。 我搜索了有关特殊变量的说明,并找到了以下说明$0: 当前shell或程序的名称 当前脚本的文件名 脚本本身的名称 运行命令 $0如果没有该脚本而调用脚本,则这些命令都不能清楚表明目录的值是否包含该目录。最后一个实际上向我暗示不会。 在我的系统上测试(Bash 4.1) 我在/ usr / local / bin 中用一行创建了一个名为scriptname的可执行文件,echo $0并从不同位置调用了它。 这些是我的结果: > cd /usr/local/bin/test > ../scriptname ../scriptname > cd /usr/local/bin > ./scriptname ./scriptname > cd /usr/local > bin/scriptname bin/scriptname > cd …

1
在bash中完成POSIX中的间接变量扩展?
有可能吗,或者有一些不错的技巧可以像在Bash中一样在POSIX中进行间接变量扩展? 对于上下文,我正在尝试执行以下操作: for key in ${!map_*} do # do something done 编辑:澄清一下,我想访问以开头的shell变量map_。

4
Shell脚本中的关联数组
我看到了在Shell脚本中实现关联数组的技巧。例如print array["apples"],可以编写为echo \$array$keykey = apples。 但是,没有提到如何生成用于遍历数组的密钥。我能想到的唯一方法是将键存储在以空格分隔的变量中,以便可以使用for循环遍历数组。 因此,还有其他方法可以存储密钥以供以后使用吗?

3
基于环境变量的条件分配
在bash脚本中,我要分配一个局部变量,以便该值取决于外部的全局环境变量($MYAPP_ENV)。 if [ "$MYAPP_ENV" == "PROD" ] then SERVER_LOGIN=foobar123@prod.example.com else SERVER_LOGIN=foobar987@test.example.com fi 有没有一种较短的(到目前为止还很干净)编写上述作业的方法?(大概使用某种条件运算符/内联if。)

5
Shell脚本,如果磁盘使用率超过90%,则发送警报邮件
我想在服务器上实现一个脚本,如果磁盘使用率超过90%,它将自动发送电子邮件警报;当磁盘使用率超过95%时,将自动发送第二电子邮件警报。我的文件系统是abc:/xyz/abc,挂载点是/pqr。 我已经试过了: ADMIN="someone@def.com" ALERT=90 df -H | grep -vE 'abc:/xyz/pqr | tmpfs |cdrom' | awk '{ print $5 " " $1 }' | while read output; do usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) partition=$(echo $output | awk '{ print $2 }' ) if [ …

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.