标签: bourne-shell

Unix Bourne Shell 中的数组

我正在尝试在 Bourne shell ( /bin/sh) 中使用数组。我发现初始化数组元素的方法是:

arr=(1 2 3)
Run Code Online (Sandbox Code Playgroud)

但它遇到了一个错误:

syntax error at line 8: `arr=' unexpected
Run Code Online (Sandbox Code Playgroud)

现在,我发现此语法的帖子说它是 for bash,但我找不到 Bourne shell 的任何单独语法。语法是否/bin/sh也一样?

shell array bourne-shell

39
推荐指数
3
解决办法
5万
查看次数

如何在源代码中read -p的提示下将一个长字符串分成多行?

我正在编写一个安装脚本,它将作为/bin/sh.

有一行提示输入文件:

read -p "goat may try to change directory if cd fails to do so. Would you like to add this feature? [Y|n] " REPLY
Run Code Online (Sandbox Code Playgroud)

我想把这条长行分成多行,这样每行都不超过 80 个字符。我说的是脚本源代码中的行;与执行脚本时实际打印在屏幕上的行无关

我试过的:

shell string shell-script newlines bourne-shell

29
推荐指数
1
解决办法
6万
查看次数

使用 ^ 作为 shell 元字符

我今天写了一个小脚本,其中包含

grep -q ^local0 /etc/syslog.conf
Run Code Online (Sandbox Code Playgroud)

在审查期间,一位同事建议^local0引用,因为^在 Bourne shell 中表示“管道”。对这个说法感到惊讶,我试图追踪任何提到这一点的参考资料。我在互联网上发现的任何内容都没有表明这是一个问题。

但是,事实证明,bshAIX 7 上的(声称是 Bourne shell)的实现实际上具有以下行为:

> bsh
$ ls ^ wc
      23      23     183
$ ls | wc
      23      23     183
Run Code Online (Sandbox Code Playgroud)

我尝试过的其他“Bourne shell”实现^都没有这种行为(也就是说,根本不被认为是 shell 元字符)。我sh在 CentOS(真正的 bash)和shFreeBSD(不是 bash)上尝试过。我没有很多其他系统可以尝试。

这种行为是预期的吗?哪些 shell 被认为^是管道元字符?

shell pipe history portability bourne-shell

19
推荐指数
1
解决办法
1416
查看次数

如何在 POSIX shell 脚本中创建算术循环?

我知道如何forbash.

如何在 POSIX shell 脚本中执行等效循环?

由于有多种方法可以实现同一目标,请随意添加您自己的答案并详细说明其工作原理。

一个这样的bash循环的例子如下:

#!/bin/bash
for (( i=1; i != 10; i++ ))
do
    echo "$i"
done
Run Code Online (Sandbox Code Playgroud)

shell-script posix bourne-shell

19
推荐指数
2
解决办法
7692
查看次数

bash/bourne 中是否有“in”运算符?

我正在寻找一个像这样工作的“in”运算符:

if [ "$1" in ("cat","dog","mouse") ]; then
    echo "dollar 1 is either a cat or a dog or a mouse"
fi
Run Code Online (Sandbox Code Playgroud)

与使用多个“或”测试相比,这显然是一个更短的语句。

bash shell-script bourne-shell

18
推荐指数
4
解决办法
9240
查看次数

IFS null 与未设置 IFS 不一样?

我在这里读了一个很棒的问题,叫做“理解 IFS”。我很惊讶,因为答案和评论引用了 POSIX,它指出 IFS= 与取消 IFS 不同。如果您取消设置 IFS,显然会使用默认值。如果您将 IFS 设为 null,则没有拆分器。我知道我看到了不同的看法,我在我的书签中找到了这个:

Bourne Shell 编程

$IFS

脚本中的第一条语句应该是

IFS=

它将输入字段分隔符重置为其默认值。否则,您将从用户那里继承 $IFS,用户可能将它设置为一些奇怪的值,以使 sh 解析字符串的方式与您期望的方式不同,并导致奇怪的行为。

那么前一段时间是真的还是作者错了?

shell shell-script bourne-shell

13
推荐指数
1
解决办法
7774
查看次数

"${PS1-}" 语法是否有效,它与普通的 "$PS1" 有何不同?

我正在查看具有以下内容的脚本:

if [ "${PS1-}" ]; then
Run Code Online (Sandbox Code Playgroud)

尾随的-错误让我有点,因为它似乎不是 Posix 或 Bash 标准语法。这是一些永远存在的神秘语法,还是打字错误?任何对标准/文档的引用将不胜感激。

通常我会编码它:

if [ "$PS1" ]; then
Run Code Online (Sandbox Code Playgroud)

哪个更正确或者它们之间有什么区别?

shell bash posix variable-substitution bourne-shell

13
推荐指数
3
解决办法
2195
查看次数

尝试编写一个 shell 脚本来远程测试服务器,但是当我注销时它一直在 else 语句中

尝试在这里编写一个 shell 脚本,它不断测试我的服务器并在它出现故障时给我发送电子邮件。

问题是,当我从 ssh 连接注销时,尽管&在命令末尾运行它,例如./stest01.sh &,它会自动落入 else 并不间断地向我发送邮件,直到我再次登录并杀死它。

#!/bin/bash
while true; do
    date > sdown.txt ;
    cp /dev/null pingop.txt ;
    ping -i 1 -c 1 -W 1 myserver.net > pingop.txt &
    sleep 1 ;
    if
        grep "64 bytes" pingop.txt ;
    then
        :
    else
        mutt -s "Server Down!" myemail@address.com < sdown.txt ;
        sleep 10 ;
    fi
done
Run Code Online (Sandbox Code Playgroud)

linux grep shell-script ping bourne-shell

9
推荐指数
1
解决办法
939
查看次数

Bourne Shell 有正则表达式验证器吗?

我使用的是封闭网络(即没有连接到互联网)。

我有一个 bourne shell 脚本,要求用户输入与grep -P.

一般来说,我喜欢进行某种形式的输入验证。
有没有办法测试字符串变量以查看它是否是(有效的)正则表达式?
(可以将互联网上的内容复制到我的系统上,但这需要很长时间,而且是 PITA——因此我正在寻找在本地完成此操作的方法。)

linux regular-expression bourne-shell

7
推荐指数
1
解决办法
1056
查看次数

bourne shell if [ -e $directory/file.$suffix ]

#!/bin/sh
CONFIG_DIR="/var/opt/SUNWldm/"
read option
if [ $option -eq 9 ]; then
        ret=1
elif [ -e ${CONFIG_DIR}file.xml.${option} ]; then
        echo "TRUE"
fi
Run Code Online (Sandbox Code Playgroud)

我在 while 循环中有上面的代码来显示选项列表。不幸的是,我在elfi声明中遇到了问题。

From: IF for Beginners如果文件存在, -e 返回真。

我已经仔细检查了语法,甚至在调试模式下运行脚本(我放在set -x这个脚本的开头,可以看到中的替换if正确完成,如内联所示:

+ [ 201301271355 -eq 9 ]
+ [ -e /var/opt/SUNWldm/file.xml.201301271355 ]
./ldm_recover.sh: test: argument expected
Run Code Online (Sandbox Code Playgroud)

到目前为止,我一直在寻找并没有找到失败的原因,任何想法我做错了什么?

shell solaris test bourne-shell

5
推荐指数
1
解决办法
6134
查看次数