相关疑难解决方法(0)

测试 shell 对数组的支持

是否有一种简洁的方法可以在命令行中测试本地类似 Bourne 的 shell 对数组的支持?

这总是可能的:

$ arr=(0 1 2 3);if [ "${arr[2]}" != 2 ];then echo "No array support";fi
Run Code Online (Sandbox Code Playgroud)

或测试$SHELL和外壳版本:

$ eval $(echo "$SHELL --version") | grep version
Run Code Online (Sandbox Code Playgroud)

然后阅读手册页,假设我可以访问它。(即使在那里,从写/bin/bash,我假设所有类似Bourne外壳承认的长选项--version,当减免KSH例如)。

我正在寻找一个简单的测试,它可以无人参与,并在脚本开始时甚至在调用它之前合并到使用部分中。

shell array shell-script

13
推荐指数
2
解决办法
1917
查看次数

为什么 foo=bar 与 foo= bar 不同?

这个命令中的空格的解释是什么foo= bar

为什么foo=barfoo= bar解释不同

示例(Ubuntu bash)

developer@1604:~$ foo=bar
developer@1604:~$ foo= bar
The program 'bar' is currently not installed. You can install it by typing:
sudo apt install bar
Run Code Online (Sandbox Code Playgroud)

shell variable assignment

4
推荐指数
1
解决办法
1929
查看次数

脚本抛出错误“=:未找到”

考虑:

#!/bin/ksh

db2 connect to MKTETLPS user ....... using ........

db2 "select count(*)  from etl.IDM_COLLAPSE_ORG_DEE c where c.IDM_PROCESS_STEP = 'I' and priority in ( '1','2','3','4','5') and c.update_ts < (current timestamp - 60 minutes) with ur"  > l.txt

$a = /is115/idm/dsproj/scripts/l.txt

        if [ $a -gt 0 ];
      then
        db2  "update etl.idm_collapse_org_dee
             set idm_process_step = NULL where priority in (
'1','2','3','4','5')
             and idm_process_step ='I'"
      else
          echo "All is well"
fi
Run Code Online (Sandbox Code Playgroud)

我在脚本上方运行并收到以下错误。我该如何解决?

./CORCleanup1.sh[8]: =:  not found.
./CORCleanup1.sh[10]: test: 0403-004 Specify a parameter with …
Run Code Online (Sandbox Code Playgroud)

ksh shell-script

4
推荐指数
1
解决办法
2644
查看次数

命令在命令行中工作,但在 shell 脚本中不起作用

我正在创建一个脚本,当我尝试捕获命令返回时,如果我在终端上使用此命令,则会出现未找到命令的错误:

gcloud -q compute snapshots list --format='csv(NAME)'
Run Code Online (Sandbox Code Playgroud)

它工作正常。

脚本是:

#!/bin/sh
CSV_SNAPSHOTS= $(gcloud -q compute snapshots list --format='csv(NAME)')
IFS=$'\n'

for i in $CSV_SNAPSHOTS
do
    echo "$i"
done
Run Code Online (Sandbox Code Playgroud)

shell-script command-substitution

3
推荐指数
1
解决办法
2717
查看次数

在 bash 脚本变量赋值不起作用

我有一个问题,我需要用 shell 脚本编写程序,所以我打开了一本关于 linux 的书,其中有一章是关于 bash 脚本的。编写一个测试脚本来测试我遇到的命令似乎是个好主意,但第一个脚本不起作用,并且以其他明显的方式更改它并不能解决问题。

示例中显示的脚本是:-

#!/bin/bash
count=10
nextcount=$count + 1
echo $count
echo $nextcount
Run Code Online (Sandbox Code Playgroud)

运行这个脚本的结果应该是什么

[Carl@localhost bin]$ testscript
10
11
Run Code Online (Sandbox Code Playgroud)

然而实际结果是

[Carl@localhost bin]$ testscript
/home/Carl/bin/testscript: line 3: +: command not found
10
Run Code Online (Sandbox Code Playgroud)

错误消息表明“+”号被解释为命令而不是加法运算符。

如果我删除“+”号周围的空格,使脚本变成

#!/bin/bash
count=10
nextcount=$count+1
echo $count
echo $nextcount

[Carl@localhost bin]$ testscript
10
10+1
Run Code Online (Sandbox Code Playgroud)

第 3 行语句而不是将 1 加 10 得到 11 连接“10”、“+”和“1”

更改 line3 以读取nextcount=$count +1nextcount=$count+ 1也不起作用。

在脚本编写教科书的第一个示例中发现无法解决的问题不应该发生。我要疯了吗?

bash shell-script

2
推荐指数
1
解决办法
7029
查看次数

shell Unix 中的计算

我正在尝试计算 2 个 unix 时间的差异以进行简单的计算(在 shell 脚本中),但它似乎不起作用。

我已设置2个变量一个叫$d和其他$c

这是我目前用于设置变量的语法:

c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $c
d= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $d
Run Code Online (Sandbox Code Playgroud)

(变量 a 和 b 只是从另一个脚本接收时间戳)

我正在尝试减去$c …

shell shell-script calculator

2
推荐指数
1
解决办法
232
查看次数

变量中的输出不应被解释为命令

所以这个问题已经被问过几次了,但答案似乎对我不起作用。所以我有这个简单的脚本

#!/bin/bash
charon_id = $(pidof charon)
kill -1 $charon_id
Run Code Online (Sandbox Code Playgroud)

控制台说charon_id: command not found*

我尝试了不同的版本,"$( ),;后面,甚至是$(... 2>&1)我在某处看到的。到目前为止没有任何帮助。建议?

* 从控制台语言翻译成英文

shell-script variable assignment

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

无法打开文件作为第一个参数

我正在尝试运行一个脚本,如:

./script.sh file

但我收到(如果我使用 txt 文件):

=:        cannot open `=' (No such file or directory)
test.txt: ASCII text
Second
Run Code Online (Sandbox Code Playgroud)

如果我使用 gz 文件:

=:           cannot open `=' (No such file or directory)
test.txt.gz: gzip compressed data, was "test.txt", last modified: Wed Jul 20 09:17:58 2016, from Unix
Second
Run Code Online (Sandbox Code Playgroud)

(我有脚本和文件在同一目录中)

脚本:

#!/bin/bash

file = $1

if [[ $file == *.gz ]];then

    echo "First"
else
    echo "Second"

fi
Run Code Online (Sandbox Code Playgroud)

scripting shell-script

0
推荐指数
1
解决办法
4802
查看次数

Bash - 设置一个变量

我需要在我的 bash 脚本中设置一个变量

#!/usr/bin/env bash

GITNAME= git config --global user.name
echo " $GITNAME "
Run Code Online (Sandbox Code Playgroud)

但它似乎不是这样工作的。

它是如何工作的?

bash assignment

0
推荐指数
2
解决办法
1706
查看次数