GVKun编程网logo

Bash c风格if语句和样式技巧(bash的if语句)

2

在本文中,我们将详细介绍Bashc风格if语句和样式技巧的各个方面,并为您提供关于bash的if语句的相关解答,同时,我们也将为您带来关于bash/shif语句的语法、Bashif语句中带有变量的空格

在本文中,我们将详细介绍Bash c风格if语句和样式技巧的各个方面,并为您提供关于bash的if语句的相关解答,同时,我们也将为您带来关于bash / sh if语句的语法、Bash if语句中带有变量的空格、Bash if语句行为、bash – shell脚本:if语句的有用知识。

本文目录一览:

Bash c风格if语句和样式技巧(bash的if语句)

Bash c风格if语句和样式技巧(bash的if语句)

根据我的理解,你可以在bash中使用C-style for和while循环.
LIMIT=10

for ((a=1; a <= LIMIT ; a++))  # Double parentheses,and "LIMIT" with no "$".
do
  echo -n "$a "
done                           # A construct borrowed from 'ksh93'.

甚至是三元操作符.

(( var0 = var1<98?9:21 ))

你会用if语句怎么做?

另外他们为什么不在C中实现大括号呢?使用所有这些关键字的逻辑是什么,如done,do,if和fi?我将编写一些脚本,但bash看起来非常不同.

有没有任何bash样式技术或bash替代品/插件?我想遵循标准,但来自C,Java和PHP背景bash看起来很奇怪.可维护性和标准很重要.

bash(以及sh家族的其他shell)的一些语法特性与if有关:

>基本的if语句具有if-condition的语法;然后列出; fi(有可能为其他分支添加elif和其他分支).

> condition-command可以是bash支持的任何命令(我认为,即使是另一个命令),然后执行返回值. (实际上,它也可以是一个命令列表,但这可能会使读者感到困惑.最后一个命令的返回值会计入条件.)
> Bash(和一般的Unix shell)以一种不寻常的方式解释程序的结果代码(对于C程序员):0的结果被解释为true(或“无错误”),并且任何其他结果被解释为false(或“发生了一些错误”). (在C和其他一些语言中,它是相反的:0是假的,其他一切都是真的.)
>如果condition-command的结果为0(true),则执行列表(if的返回值是列表的结果).如果它不是-0(假),则不执行列表(但是elif或else分支,如果有的话). (如果没有执行任何列表,则if的返回值为0.)

>一些有用的命令作为条件(这些也作为while循环中的条件):

> […]实际上是另一种编写测试的方法… – 这只是一个可能返回0(真)或1(假)的命令,具体取决于你给出的参数. (这是shell的构建.)
> [[…]]是条件表达式命令.它支持一些相同的参数[支持,并且更多,如括号,<,>和(…)用于条件嵌套,并处理不同内部的扩展,因为它是一个特殊的语法结构而不是一个buildin命令.整个事情是一个返回0(真)或1(假)的命令.
>((…))是一个算术表达式(或其中几个)作为命令的包装器.当(last)表达式的结果为非0时,结果为0(true);当(last)表达式的结果为0时,结果为1(false).(您可以改为写let ….)

在算术表达式中,shell变量可以在没有$的情况下使用,并且所有内容都被解释为整数(具有固定宽度,但我没有找到哪个).您可以使用以下运算符:

>一元:,–,!,〜(在C中)
>二进制算术:**(指数),*,/,%,–
>位移:<<,>>
>比较:< =,> =,>,==,!=(我认为这些返回1(真)或0(假))
>按位:&,^,|
>逻辑:&&,||,当然还有三元运算符:……? ……:……
>赋值:=,* =,/ =,%=,=,– =,<< =,>> =,& =,^ =,| =
>逗号:,(只是连接两个表达式,返回最后一个的值)

我认为一般来说这很像C整数表达式. (这些大致按优先顺序排列,但有时每个组内部都存在划分.查看信息'(bash)Shell Arithmetic’了解详细信息.)
> true是一个什么都不做的buildin,总是返回0.
> false是一个什么都不做的buildin,总是返回1.
>您也可以将外部C(或其他任何)程序称为命令,其返回值的解释方式相同.

>列表:

>(…)是一个命令列表,在子shell中执行.此子shell中的变量赋值不会传播回来.
> {…;是一个命令列表,它不会创建子shell.
>;是列表中命令的简单分隔符,但也可以用换行符替换.
>&&是仅在第一个返回0时执行第二个命令的命令的分隔符.
> ||是仅当第一个返回not-0时执行第二个命令的命令的分隔符.
>&是命令的分隔符,并行执行两个命令(后台的第一个命令).

所以,你可以用一些大括号和圆括号编写你的if命令,但你仍然需要你的那个和fi:

if (( i > 0 ))
then {
   echo "i > 0"
}
else {
   echo "i <= 0"
}
fi

这里的括号简直是多余的,因为当时,else和fi之间的命令无论如何都是(每个)一个列表. (还要注意需要换行符号;在此处关闭括号之前和之后.)

但正如其他人所说,如果你想使用类似C的语法,最好使用另一种语言.

bash / sh if语句的语法

bash / sh if语句的语法

在各种指南和脚本中,我碰到人们倾向于使用if语句的不同语法。 有什么不同,什么是最佳实践? 我相信所有以下的陈述,以及更多的变种,都会返回true:

bar="foo" if [ "foo" = "foo" ] if [[ "foo" == $bar ]] if [ "foo" = "$bar" ] if [[ "foo" = "$bar" ]] if [[ "foo" -eq $bar ]]

Bash脚本根据数量归档文件

检查进程是否正在运行

dirpath难题在bash中?

为什么env不打印PS1variables?

无法链接多个sed命令

据我所知

=期望字符串

-eq期望整数

“$ bar”用于文字匹配,即z *可以扩展,但“z *”将与通配符字符相符。

[]和[[]]之间的区别在于后面的单词分割和路径名称扩展没有完成,但在前者中。

Plus [[]]允许额外的操作符:

&&(AND),|| (OR),>(String1词性大于String2),<(String1词性小于String2)

==比较运算符在双括号测试中的行为与单个括号内的不同。

[[$ a == z *]]#如果$ a以“z”(模式匹配)开始,则为真。

[[$ a ==“z *”]]#如果$ a等于z *(文字匹配),则为真。

[$ a == z *]#发生文件通配和分词。

[“$ a”==“z *”]#如果$ a等于z *(文字匹配),则为真。

查看http://tldp.org/LDP/abs/html/comparison-ops.html了解更多信&#x606F;

[是一个bash内建的, [[是一个bash关键字。 最佳做法是始终使用[[如果脚本不必与其他shell兼容(例如,如果它以#!/bin/bash开头),并且[仅用于与Bourne shell兼容。 见http://mywiki.wooledge.org/BashFAQ/031 。

我推荐case / esac。

case "$foo" in "bar" ) echo "bar";; *) echo "not equal";; esac

不要担心不同的语法。

Bash if语句中带有变量的空格

Bash if语句中带有变量的空格

有一天,我正在努力进行if声明.转动我们的变量在开头有一个空格.所以我试着用下面的代码来征服它,但我没有运气.

if [ "$COMMAND_WAIT" == "*REBOOT" ]; then
sudo /etc/kca/scripts/reboot.sh
echo "REBOOTING"
fi

我是否应该能够对此声明进行通配符,还是有另外一种解决方法?

解决方法

以下应该有效.它使用[[而不是[,而不是模式周围的引号.

if [[ "$COMMAND_WAIT" == *REBOOT ]]; then
    sudo /etc/kca/scripts/reboot.sh
    echo "REBOOTING"
fi

[[expression]]是一个复合表达式,有关扩展和引用的特殊规则.相反,[是一个内置命令,即* REBOOT将扩展为路径名.在大多数情况下,它更容易使用[[而不是[.

Bash if语句行为

Bash if语句行为

我遗漏了关于bash的if构造/运算符或字符串比较的基本内容.
请考虑以下脚本:
#!/bin/bash
baseSystem="testdir1"
testme="NA"
if [ "$baseSystem"=="$testme" ]; then
    echo "In error case"
fi
if [ "$baseSystem"!="$testme" ]; then
    echo "In error case"
fi

我明白了:

In error case
In error case

因此它进入每个案例,即使它们应该是互相排斥的.
任何帮助表示赞赏.

bash碰巧对空间有点特别.

在运算符周围添加空格:

if [ "$baseSystem" == "$testme" ]; then

...

if [ "$baseSystem" != "$testme" ]; then

以下不相同:

[ "$a"="$b" ]
[ "$a" = "$b" ]

你的第一次测试基本上与说“[testdir1 == NA”]相同;那将永远是真的.

bash – shell脚本:if语句

bash – shell脚本:if语句

我在这里按照教程: http://bash.cyberciti.biz/guide/If..else..fi#Number_Testing_Script

我的脚本看起来像:

lines=`wc -l $var/customize/script.PHP`
if test $lines -le 10
then
    echo "script has less than 10 lines"
else
    echo "script has more than 10 lines"
fi

但我的输出看起来像:

./boot.sh: line 33: test: too many arguments
script has more than 10 lines

为什么说我有太多的论点?我没有看到我的脚本与教程中的脚本有何不同.

wc -l file命令会打印两个单词.试试这个:
lines=`wc -l file | awk '{print $1}'`

要调试bash脚本(boot.sh),您可以:

$bash -x ./boot.sh

它将打印每一行执行.

我们今天的关于Bash c风格if语句和样式技巧bash的if语句的分享已经告一段落,感谢您的关注,如果您想了解更多关于bash / sh if语句的语法、Bash if语句中带有变量的空格、Bash if语句行为、bash – shell脚本:if语句的相关信息,请在本站查询。

本文标签: