本文内容来自对 《朱有鹏嵌入式linux核心课程》学习总结
shell中其他值得关注的知识点
1. case语句
-
shell
中的case
语句和 C 语言中的switch case
语句作用一样,格式有差异。 -
shell
中的case
语句天生没有break
,也不需要break
,和C语言中的switch case
不同。shell
中的case
默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case
(就好像shell
中的case
语言默认都带了break
)。示例
#!/bin/sh var=1 case $var in 1) echo "1" ;; 2) echo "2" ;; esac
执行结果
root@book-virtual-machine:/mnt/hgfs/windows/study-notes/嵌入式/uboot移植/1.补基础之shell和makefile# ./helloworld.sh 1
2. 调用shell程序的传参
-
C 语言中可以通过
main
函数的argc
和argv
给程序传参 -
shell
程序本身也可以调用时传参给他。在shell
程序内部使用传参也是使用的一些特定符号来表示的,包括:
$0, $1, $2...
则依次表示传参的各个参数。C 语言:
./a.out aa bb cc argc=4, argv[0]=./a.out, argv[1]
是第一个有效参…shell:
source a.sh aa bb cc $#=3
,
$0
是执行这个shell
程序的解析程序的名字,$1
是第一个有效参数的值,$2
是第2个有效参数的值…注意:
shell
中的很多语法特性和 C 语言中是相同的,也有很多是不同的。(需要多做笔记,多总结,多写代码)
示例#!/bin/sh echo $# echo $0 echo $1 echo $2 echo $3
执行结果
root@book-virtual-machine:/mnt/hgfs/windows/study-notes/嵌入式/uboot移植/1.补基础之shell和makefile# ./helloworld.sh aa bb cc 3 ./helloworld.sh aa bb cc
3. while 循环和 case 语言和传参相结合
shell
中的break
关键字和c
语言中意义相同(都是跳出)但是用法不同。因为shell
中case
语句默认不用break
的,因此在shell
中break
只用于循环跳出。所以当while
中内嵌case
语句时,case
中的break
是跳出外层的while
循环的,不是用来跳出case
语句的。- shell中的
$#
,$1
等内置变量的值不是不可变的,而是可以被改变的,被shift
指令改变。shift
指令有点像左移运算符,把我们给shell
程序的传参左移了一个移出去了,原来的$2
变成了新的$1
,原来的$#
少了1个。
示例
执行结果#!/bin/sh echo $# $0 $1 $2 $3 shift echo $# $0 $1 $2 $3
root@book-virtual-machine:/mnt/hgfs/windows/study-notes/嵌入式/uboot移植/1.补基础之shell和makefile# ./helloworld.sh aa bb cc 3 ./helloworld.sh aa bb cc 2 ./helloworld.sh bb cc