嵌入式学习--LinuxDay03
shell脚本
1.1功能性语句
1.1.1说明性语句
1.1.2功能性语句
1)read
2)expr
3) test
a)字符串
b)整数的测试
c)文件属性的测试
1.2结构性语句
1.2.1if语句
1.2.2case语句
1.2.3for循环
1.2.4while循环
1.2.5循环控制语句
shell脚本
1.1功能性语句
1.1.1说明性语句
以#开头
用#注释
1.1.2功能性语句
1)read
功能:从标准输入读入一行,并赋值给后面的变量
格式: read VAR1 VAR2 VAR3
读入的第一个字符串给VAR1,第二个给VAR2,剩下所有都给VAR3
read -p "提示语句" 变量名 :可以将提示语句输出,同时输入变量
2)expr
格式: expr 表达式
算术运算符expr主要用于简单的整数运算,加(+),减(-)乘( \*) 除 (/)取余 (%)
例:
expr 12 + 5 \* 3
注意:
1)表达式符号之间必须用空格间隔
2)expr引用变量必须$
3)expr自带打印功能
4)使用乘号\* 小括号\( \) 需要转义
5)把expr的结果赋值给变量需要命令置换符
6)expr不能进行++ -- 操作
#!/bin/bash
VAR1=5
VAR2=10
echo $VAR2
VAR2=`expr \( $VAR1 + 5 \) \* 2`
echo $VAR2
练习:通过expr实现变量自加运算
a++ == a=a+1
#!/bin/bash
VAR1=5
VAR1=`expr $VAR1 + 1`
echo $VAR1
练习2:计算表达式值a*b+c-d/b,a=2,b=3,c=15,d=18
要求:
1)从终端读入4个数a,b,c,d
2)进行运算
3)打印结果输出到终端
3) test
字符串 整数 文件属性
a)字符串
$s1 = $s2 测试两个字符串是否完全一样
$s1 != $s2 测试两个字符串是否不一样
-z $s1 测试s1长度是否为0
-n $s1 测试s1长度是否不为0
b)整数的测试
$a -eq $b 测试a是否等于b equal
$a -ne $b 测试a是否不等于b
$a -gt $b 测试a是否大于b greater than
$a -ge $b 测试a是否大于等于b
$a -lt $b 测试a是否小于b less than
$a -le $b 测试a是否小于等于b
#!/bin/bash
NUM=10
test $NUM -eq 1
echo $? #非0
test $NUM -ne 10
echo $? #非0
test $NUM -le 15
echo $? #0
test $NUM -gt 5
echo $? #0
c)文件属性的测试
测试name 是否为一个目录文件 -d name
测试name 是否为一个普通文件 -f name
测试name 是否存在 -e name
1.2结构性语句
1.2.1if语句
1)基本结构
if 条件
then
命令表1
else
命令表2
fi
#!/bin/bash
read N
if test $N -eq 10
then
echo "="
else
echo "!="
fi
2)分层结构
if 条件1
then
命令表1
elif 条件2
then
命令表2
else
命令表3
fi
3)嵌套结构
if 条件1
then
if 条件2
then
命令表1
else
命令表2
fi
else
命令表3
fi
4)判断语句其他格式
if [ 条件 ]
then
命令表1
else
命令表2
fi
注意:
- if 和 fi是条件语句的括号,必须成对使用
- 命令表中的命令可以一条也可以多条
注释整段代码:
if false
then
fi
练习:从终端输入3个整数;从小到大排序
1.2.2case语句
格式:
case 变量 in
模式1)
命令表1
;;
模式2)
命令表2
;;
。。。。
*)
命令表n
;;
esac
注意:
1)case语句只能检测字符串变量
2)命令表以单独的;;结束,退出case语句
3)模式n通常写为*,表示其他所有的模式
4)case匹配项中可以存在多个模式,每种模式之间|隔开
1.2.3for循环
格式:
for 变量名 in 单词表
do
命令表
done
变量依次从单词表中读取各个单词,每取一次单词,就执行一次循环体中的命令表,循环次数由单词表中的单词数决定,命令表中的命令可以一条,也可以是由分号或换行符分隔开的多条。
例:
for语句的几种基本书写格式:
1)for i in 1 2 3 4 5
do
....
done
变量i从单词表中取值
2)for i
do
...
done
变量i从命令行取值,可以省略in 单词表
3)for i in {1..10}
do
...
done
变量i从1-10取值
4)for ((i=0;i<10;i++))
do
...
done
书写格式类似于c语言
#!/bin/bash
#1)
# for i in 1 2 3 4 5
# do
# echo -n "$i "
# done
# echo
#2)
# for i
# do
# echo -n "$i "
# done
# echo
#3)
# for i in {1..10}
# do
# echo -n "$i "
# done
# echo
# 4)
for ((n=1;n<=10;n++))
do
echo -n "$n "
done
echo
练习:实现1-10求和
1.2.4while循环
格式:
while 命令或表达式
do
命令表
done
输出1-10?
1.2.5循环控制语句
break n :结束n层循环
continue n:结束n层本次循环,继续下一次循环