是否有一种简洁的方法可以在命令行中测试本地类似 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例如)。
我正在寻找一个简单的测试,它可以无人参与,并在脚本开始时甚至在调用它之前合并到使用部分中。
这个命令中的空格的解释是什么foo= bar?
为什么foo=bar和foo= 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) 考虑:
#!/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) 我正在创建一个脚本,当我尝试捕获命令返回时,如果我在终端上使用此命令,则会出现未找到命令的错误:
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 脚本编写程序,所以我打开了一本关于 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 +1或nextcount=$count+ 1也不起作用。
在脚本编写教科书的第一个示例中发现无法解决的问题不应该发生。我要疯了吗?
我正在尝试计算 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 …
所以这个问题已经被问过几次了,但答案似乎对我不起作用。所以我有这个简单的脚本
#!/bin/bash
charon_id = $(pidof charon)
kill -1 $charon_id
Run Code Online (Sandbox Code Playgroud)
控制台说charon_id: command not found*
我尝试了不同的版本,"在$( ),;后面,甚至是$(... 2>&1)我在某处看到的。到目前为止没有任何帮助。建议?
* 从控制台语言翻译成英文
我正在尝试运行一个脚本,如:
./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) 我需要在我的 bash 脚本中设置一个变量
#!/usr/bin/env bash
GITNAME= git config --global user.name
echo " $GITNAME "
Run Code Online (Sandbox Code Playgroud)
但它似乎不是这样工作的。
它是如何工作的?
shell-script ×7
assignment ×3
shell ×3
bash ×2
variable ×2
array ×1
calculator ×1
ksh ×1
scripting ×1