# 教程
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 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。
# 双小括号
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 循环中也使用的双小括号,但是双小括号有分号将运算式分开。
# 方括号
在 linux 下可以 man test
查看相关的信息。
# 双方括号
以后大家使用 if 判断条件时,用 (()) 来处理整型数字,用 [[ ]] 来处理字符串或者文件。
# 数组
删除数组元素是影响数组的长度的
nums=(1 2 3) | |
echo ${nums[*]} # 1 2 3 | |
echo $ |