查找变量的过程
变量引用的顺序》》先从当前进程查询变量,如果当前进程没有此变量,默认去父进程查找这个变量。如果查找到则返回,否则一直查找到 祖宗(PID为1),还没有,则就没找到。
export修饰变量,则表明这个变量对子进程是可见的。或者说 用export 修饰的变量,可以转递给子进程。
运算符
# $((算式)) 或 $[ 算式 ]
# $((算式)) 中的算式 可以用数学中 >=、*等
# $[ 算式 ] 大于 -gt,小于 lt等
test
test expression
或者使用方括号的简写形式:
[ expression ] 这种更常用
注意:使用方括号格式时,表达式与方括号之间必须有空格,即 [空格EXPRESSION空格]
[ ] 》》》1, 即false
[ xx ] 》》0 ,即true
当 test 判断的表达式为真时,返回状态码为 0;如果为假,则返回非 0 值。
功能
test 命令可以进行以下几种类型的测试:
数值比较:检查两个数值之间的关系。
字符串比较:检查字符串是否相等或为空。
文件测试:检查文件是否存在、是否可读、是否可写等。
常用选项
数值比较
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
# 数值比较
#!/bin/bash
num1=10
num2=20
if test $num1 -lt $num2; then
echo "$num1 小于 $num2"
else
echo "$num1 不小于 $num2"
fi
字符串比较
=:字符串相等
!=:字符串不相等
-z:字符串为空
-n:字符串非空
# 字符串比较
#!/bin/bash
str1="hello"
str2="world"
if [ "$str1" = "$str2" ]; then
echo "字符串相同"
else
echo "字符串不同"
fi
文件测试
-e:文件存在 existence
-f:文件是普通文件 file 文件存在且是一个普通的文件
-d:文件是目录 directory 文件存在且是一个目录
-r:文件可读 read
-w:文件可写 write
-x:文件可执行 execute
# 文件测试
#!/bin/bash
FILE="/etc/passwd"
if [ -e "$FILE" ]; then
echo "文件 $FILE 存在"
else
echo "文件 $FILE 不存在"
fi
&& 、|| 跟高级语言 and ,or 一样, 还称短路 运算符
条件1 && 条件2
》》 如果条件1为 真 true,则会继续判断 条件2
》》 如果条件1为 假 false ,则不会执行 条件2
条件1 || 条件2
》》 如果条件1为 真 true,则不会执行 条件2
》》 如果条件1为 假 false ,则会继续判断 条件2
流程控制
if 判断
############# 单分支 ############
if [ condition ];then
command
fi
# 或者
if [ condition ]
then
command
fi
############ 多分支 ############
if [ condition ]; then
command
elif [ condition ]
then
command
else
command
fi
case
相当于 C# 中 switch case
;; 相当于 break
*) 相当于 default
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
#!/bin/bash
while true
do
echo "请录入成绩的等级"
read num
case $num in
A) echo "优秀"
;;
B) echo "良好"
;;
C) echo "及格"
;;
*) echo '不及格'
;;
esac
done
~
for
# 语法1
for (( 初始值; 循环控制条件; 变量变换 ))
do
command
done
# 语法2
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
# 也可以写成一行
for var in item1 item2 ... itemN; do command1; command2… done;
#!/bin/bash
for (( i=1;i<=100;i++))
do
sum=$((sum + i)) # 或 sum=$[ $sum + $i]
done
echo $sum