# 教程

https://c.biancheng.net/shell/

命令的执行状态 和 命令的返回值(直接输出到标准输出上,下一行命令可以通过管道运算符从这个标准输出取出数据的么?)

这里补充了一下转义字符的相关知识,类似于制表符 \t 这种,输出在标准输出是多个字符的,但是在表示中是一个字符的。

【『教程』什么是转义字符?】 https://www.bilibili.com/video/BV1tt411T7vC/?share_source=copy_web&vd_source=83e024fb880955db58e1d04528c46360

区分命令替换、运算符、条件判断

# 命令替换
a=$(expr 5 + 2)
a=`expr 5 + 2`
# 运算符
a=$((5+2))
a=$[5+2]
# 条件判断
[ a = 'hello' ]

# 数学运算

在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

1699188571860

# 双小括号

1、在双括号结构中,所有表达式可以像 c 语言一样,如:a++,b-- 等。
2、在双括号结构中,所有变量可以不加入:“$” 符号前缀。
3、双括号可以进行逻辑运算,四则运算
4、双括号结构 扩展了 for,while,if 条件测试运算
5、支持多个表达式运算,各个表达式之间用 “,” 分开

row=10
if (( $row ** 2 > 18 ));then
    echo "1"
else
    echo "it is a test"
fi

结果是 1

综合上面来看,运算符也可以当做运算条件的呀。

在双小括号中,操作数和操作符之间,操作数和双小括号之间有无空格都可以正常运行。

即如下面的代码所示:

if (($row ** 2 > 18 ))
if (($row ** 2 > 18))
if (($row** 2 > 18))
if (($row **2>18))

直接在控制台运行上述判断条件,然后输出 echo $? 。说明 if 判断语句时通过 $? 来决定分支的。0 为正确,1 为不正确。

注:双括号内,也不能写小数

  • 在双小括号中 (()),$ 是可要可不要,还是一定不要?
  • 可要可不要

如果是使用 变量名=$((运算)) ,则是将运算结果赋值给该变量

#!/bin/bash
sum=0
sum=$((sum >= 0))
echo $sum #输出 1

上面的代码可以对比判断结果赋值给变量和输出 $? 的不同,判断结果为真时,赋值给变量为 1, $? 为 0。

可以使用获取(())命令的结果,这和使用获取 `(( ))`命令的结果,这和使用获得变量值是类似的。

不能直接 echo ((1+2)) ,只能 echo $((1+2))

for 循环中也使用的双小括号,但是双小括号有分号将运算式分开。

# 方括号

1699195701624

在 linux 下可以 man test 查看相关的信息。

# 双方括号

1699196194807

以后大家使用 if 判断条件时,用 (()) 来处理整型数字,用 [[ ]] 来处理字符串或者文件。

# 数组

1699197727281

1699197755204

1699198000767

1699198038637

删除数组元素是影响数组的长度的

nums=(1 2 3)
echo ${nums[*]} # 1 2 3
echo $