我的环境可以使用以下格式定义灵活数量的变量:
Var1Value=A
Var2Value=B
Var3Value=C
Run Code Online (Sandbox Code Playgroud)
我现在想遍历变量,只要它们存在。在伪代码中:
i=1
while [exists "Var"$i"Value"]; do
echo "found variable, now doing some more complex processing logic"
#do some more stuff
i=$((i + 1))
done
Run Code Online (Sandbox Code Playgroud)
我是否在 bash 中完成这项工作(不使用数组)?
我有一个变量 ( var) 返回值VAR1($var具有值VAR1) 。有一个输入文件,它VAR1定义了 ( VAR1=ABCDEF)
如何使用echo来获取值ABCDEF使用$var?
我尝试了echo $(echo $var)许多其他选项,但我总是得到输出为VAR1or echo VAR1but never ABCDEF。我source在文件中使用了VAR1声明,在命令提示符等中尝试过。
我正在学习 shell 脚本,我正在编写一个脚本,其中列出了用户具有“7”权限的文件,即“rwx”。到目前为止,我已经写了这个:
for F in *
do
a= $(stat -c "%a" "$F")
echo $a
if ((b==7))
then
echo $F
fi
done
Run Code Online (Sandbox Code Playgroud)
这里a的值为“1”。我在这里做错了什么?
我有一个文本文件,它通常填充多行,我想用 while 循环“打印”。此文件中的文本包含变量 - 我的问题是,这些变量的解释与包含存储在脚本中的变量的类似测试字符串不同。是否也可以从我的外部文件中解释这些变量,或者我是否必须事先解析它们等?$LINE_INSIDE和 和有$LINE_OUTSIDE什么区别?我尝试了来自其他问题的一些建议,例如${!varialbe_name}带有引号的不同结构,但到目前为止还没有运气。
#!/bin/bash
# color.sh
BLUE='\033[1;34m'
NC='\033[0m' # No Color
LINE_INSIDE="${BLUE}Blue Text${NC}"
echo -e ${LINE_INSIDE}
while read LINE_OUTSIDE; do
echo -e ${LINE_OUTSIDE}
done < text_file
Run Code Online (Sandbox Code Playgroud)
输出:
附加信息:我(确实)在我的输入文本文件中也有不应执行的 shell 命令。只应扩展变量。
我试图-e在 Bash 4 中分配给一个变量。但该变量仍然为空。
例如:
$ var="-e"
$ echo $var
$ var='-e'
$ echo $var
$ var="-t"
$ echo $var
-t
Run Code Online (Sandbox Code Playgroud)
为什么它适用于-t,但不适用-e?
我正在尝试设置一个 shell 变量并将其作为带有以下代码的 shell 脚本的一部分传递给命令:
SLS_DEBUG_TEXT=""
if [ "$ENABLE_DEBUG_LOGGING" = "true" ]; then
SLS_DEBUG_TEXT="SLS_DEBUG=* "
fi
$SLS_DEBUG_TEXT sls create_domain -v $AWS_PROFILE_FLAG --stage $STAGE // gives error
#SLS_DEBUG=* sls create_domain -v $AWS_PROFILE_FLAG --stage $STAGE // works correctly
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
./sls-deploy.sh: line 110: SLS_DEBUG_TEXT: command not found
Run Code Online (Sandbox Code Playgroud)
该if语句大多无关紧要,但我想表明需要有条件地设置此变量(即我并不总是希望启用调试日志记录)。代码片段中的最后一行(已注释掉)是如果启用了调试日志记录并且可以正常工作的命令应该是什么样子。
我在这里和 Stack Overflow 上发现了一些以前的帖子,其中问题是由于设置变量(示例)时等号之间的空格引起的,但我认为我没有在这里落入那个陷阱。
谢谢你的帮助。
我有以下脚本,我尝试创建一个空文本文件。我试过touch,我试过echo -n >——他们都失败了。
#!/bin/bash
set filename_result="contents"
echo "filename=$filename_result" # Shows: filename=
rm -f "$filename_result".json
touch $filename_result # Error: usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...
# Note that `% touch myfile` works fine on the command line
touch -- "$filename_result" # Error: touch: : No such file or directory
echo -n > "$filename_result" # Error: No such file or directory
echo "[" >> "$filename_result"
for file in *json
do
echo "examining file: …Run Code Online (Sandbox Code Playgroud) 我正在编写大脚本,我一直在坚持这一部分,如果有人可以帮助我,请
这是文件示例
31:49.9,9.92,TCP ,1_19,490,EXT_SERVER,22,5,257,1,.ASF,0,normal
Run Code Online (Sandbox Code Playgroud)
这是我脚本的一部分
read -p "Please input the function itself ex, > : " function
read -p "Please input the value: " value
Run Code Online (Sandbox Code Playgroud)
如果我像这样使用,对我来说很好用
cat temp | awk -F',' -v val="$value" '{if($8 > val) print $0}' > $destfile
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这样使用时
cat temp | awk -F',' -v val="$value" -v fn="$function" '{if($8 fn val) print $0}' > $destfile
Run Code Online (Sandbox Code Playgroud)
谢谢
我可以在本地运行以下循环
for i in A B C; do mycommand $i; done
Run Code Online (Sandbox Code Playgroud)
现在我正尝试将其发送过来ssh
以下版本
ssh myhost for i in A B C; do mycommand $i; done
Run Code Online (Sandbox Code Playgroud)
以下版本
ssh myhost "for i in A B C; do mycommand $i; done"
Run Code Online (Sandbox Code Playgroud)
也失败了,因为它需要i本地变量。
如何处理?
有没有通用的方法,例如,如果mycommand是另一个 ssh 怎么办?
ssh myhost 'for i in hos1 host2 host3; do ssh "$i" ... another for expression
Run Code Online (Sandbox Code Playgroud) 首先,它不像这个问题\n如何在 bash \xe2\x80\x9cuntouched\xe2\x80\x9d 中回显带有多个空格的字符串?[重复]因为在那个问题中他只想打印它,我想将它分配给变量并保存它。\n我已经尝试过这个:
\n\nSPACE=\' \'\nVAR="$VAR1${SPACE}$VAR2"\nRun Code Online (Sandbox Code Playgroud)\n 我想输入一个数字,然后加税并减去折扣。
我在尝试:
#!/bin/sh
...
final_amount = $(echo "$purchase_amount+($purchase_amount * $tax)-($purchase_amount * $discount)" |bc -l)
...
Run Code Online (Sandbox Code Playgroud)
但我得到:
$ . 3_purchase_amounts.sh
...
final_amount: command not found
...
Run Code Online (Sandbox Code Playgroud) 如何在父 shell 中引用子 shell 中定义的变量。就我而言,命令分组很困难。什么是替代方案。
变量可以用花括号保护。
Mynewvar=1
echo $Mynewvar
1
echo ${Mynewvar}
1
Run Code Online (Sandbox Code Playgroud)
但是,在 shell 内算术时我无法再保护它们。
Mynewvar=1
echo $((Mynewvar+9))
10
echo $(({Mynewvar}+9))
Run Code Online (Sandbox Code Playgroud)
bash: {Mynewvar}+9: syntax error: operand expected (error token is "{Mynewvar}+9")
Run Code Online (Sandbox Code Playgroud)
当变量名在 shell 算术中时,包围变量名的正确方法是什么?
variable ×13
bash ×8
shell ×6
shell-script ×5
arithmetic ×2
echo ×2
assignment ×1
awk ×1
linux ×1
read ×1
ssh ×1
subshell ×1