2.2.6.1、case语句
(1)shell中的case语句和C语⾔中的switch case语句作⽤⼀样,格式有差异
(2)shell中的case语句天⽣没有break,也不需要break,和C语⾔中的switch case不同。shell中的case默认就是匹配上哪个执⾏哪个,不会说执⾏完了还去执⾏后⾯的其他case(就好像shell中的case语⾔默认都带了break)。
2.2.6.2、调⽤shell程序的传参
(1)C语⾔中可以通过main函数的argc和argv给程序传参(详情参考《4.8.3.argc、argv与main函数的传参》)(2)shell程序本⾝也可以在调⽤时传参给他。在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语⾔中是相同的,也有很多是不同的。所以⼤家学的越多越容易混淆(本质原因还是⽤的不熟悉,⽤的少),解决⽅案是:做笔记、作总结、多写代码经常⽤
2.2.6.3、while循环和case语⾔和传参结合
(1)shell中的break关键字和C语⾔中意义相同(都是跳出)但是⽤法不同。因为shell中case语句默认不⽤break的,因此在shell中break只⽤于循环跳出。所以当while中内嵌case语句时,case中的break是跳出外层的while循环的,不是⽤来跳出case语句的。
(2)shell中的$# $1等内置变量的值不是不可变的,⽽是可以被改变,被shift指令改变。shift指令有点像左移运算符,把我们给shell程序的传参左移了⼀个移出去了,原来的$2变成了新的$1,原来的$#少了1个。
因篇幅问题不能全部显示,请点此查看更多更全内容