当变量给出范围时,如何在Bash中迭代一系列数字?
我知道我可以这样做(在Bash 文档中称为"序列表达式" ):
for i in {1..5}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
这使:
1
2
3
4
5
但是,如何用变量替换任何一个范围端点?这不起作用:
END=5
for i in {1..$END}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
{} 1..5
在编写shell程序时,我们经常使用/bin/sh和/bin/bash.我经常使用bash,但我不知道它们之间有什么区别.
bash和之间的主要区别是sh什么?
我们究竟需要意识到在编程时bash和sh?
我正在尝试学习shell脚本,我需要了解其他人的代码.什么是$?变量保持?我不能谷歌搜索答案,因为他们阻止标点字符.
我已经看到bash脚本以两种不同的方式测试非零长度字符串.大多数脚本使用-n选项:
#!/bin/bash
# With the -n option
if [ -n "$var" ]; then
# Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)
但是-n选项并不是真正需要的:
# Without the -n option
if [ "$var" ]; then
# Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)
哪种方式更好?
同样,这是测试零长度的更好方法:
if [ -z "$var" ]; then
# Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud)
要么
if [ ! "$var" ]; then
# Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud) 我的整个脚本目前是这样的:
#!/bin/sh
clear;
blanko="";
# Dummy-Variablen
variable=Testvariable;
if [[$variable == $blanko]];
then
echo "Nichts da!"
else
echo $variable
fi
Run Code Online (Sandbox Code Playgroud)
如果我进入
TestSelect.sh
Run Code Online (Sandbox Code Playgroud)
我明白了
/usr/bin/TestSelect.sh: line 6: [[Testvariable: command not found
Testvariable
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
在Bash中,有一种简单的方法可以测试一个字符串是否按字典顺序小于或等于另一个字符串?
我知道你可以这样做:
if [[ "a" < "b" ]]
Run Code Online (Sandbox Code Playgroud)
用于测试严格的不平等,或
if [[ 1 -le 1 ]]
Run Code Online (Sandbox Code Playgroud)
对于数字.但-le似乎没有使用字符串,并使用<=给出语法错误.
在Kyle Brandt的答案中,这个[[ ]]结构被描述为"bash内置测试命令".以下是一个例子.
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
Run Code Online (Sandbox Code Playgroud)
为什么双字括号在字面上是[[ ]]必要的?
这是一个场景 - 您开发 terraform 模块以供您的研发组织使用。它们已经被一两个微服务使用,相当于十几个 Pod。您确定了一个重构机会,例如将一些功能提取到自己的 terraform 模块中。太好了,但是现在你必须更新十几个 terraform 状态,因为这是 terraform 代码重构的代价。
经过一次这样的重构后,我发现自己花了 8 个小时来更新所有 terraform 状态。我以一种临时的方式来做这件事——使用 powershell 脚本包装各种 terraform 状态命令。如果经常这样做,一个人很快就会失去理智。
当然,我们可以说——不要重构。但这是不可能的,因为 terraform 代码是……代码。那么,有没有更好的方法呢?某种可以提供帮助的工具,不知何故?