shell编程
(1)可以直接使用linux命令
- 直接执行
- 反引号括起来执行,得到这个命令的返回值(结果值)
(2)变量定义和引用
- shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言),和C语言不同。在shell编程中定义变量不需要制定类型,也没有类型这个概念。
- 变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的。shell对语法非常在意,很多地方空格都是必须没有或者必须有。
- shell中并不刻意区分变量的定义和赋值,反正每个变量就是一个符号,这个符号的值就是最后一个给他赋值时的值。
- shell中引用一个变量必须使用$符号。如果$符号后这个字符串本身没有定义则会把这个变量解析为空。也就是说在shell中没有被定义的变量其实就相当于是一个定义并赋值为空的变量。变量引用的时候可以$var,也可以${var},主要用来标识边界
#!/bin/sh a=123 echo $a123 echo ${a}123
(3)无引号、单引号和双引号的区别
- shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是缺陷是不能输出"或者其他转义字符。
- 单引号中:完全字面替换(不可包含单引号本身)
- 双引号中:
$加变量名可以取变量的值
反引号仍表示命令替换
\$表示$的字面值 输出$符号
\`表示`的字面值
\"表示"的字面值
\\表示\的字面值
除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。(4)选择分支结构
- 典型if语言格式,注意[]里面前后都有空格,不能省略。
if [ 表达式 ]; then xxx yyy zzz else xxx ddd uuu fi 或者 if [ 表达式 ] then xxx yyy zzz else xxx ddd uuu fi
- 判断文件是否存在。(-f)
#!/bin/sh if [ -f a.txt ] then echo yes else echo no touch a.txt fi
- 判断目录是否存在 (-d)
- 判断字符串是否相等("str1" = "str2"),注意用一个等号而不是两个
- 判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
- 判断字符串是否为空(-z)注意-z判断时如果变量本身没定义也是不成立(也就是说-z认为没定义不等于为空)
- 使用“-o”表示逻辑或
- 使用“-a”表示逻辑与
- 逻辑与&&和逻辑或||与简写的if表达式相结合
#!/bin/sh string=`pwd` [ -z $string ]||echo feikong #如果string变量为空,则不执行后面的 [ -z $string ]&&echo kong #如果string变量为空,则执行后面的
- case语句 。shell中的case语句不需要break,和C语言中的switch case不同。shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break)。
#!/bin/sh var=2 case $var in 1) echo 1;; 2) echo 2;; esac
(5)循环结构
- for循环
#!/bin/sh for i in 1 2 3 do echo $i done for i in `ls` do echo $i done
- while循环
#!/bin/sh i=1 while [ $i -lt 10 ] do echo $i i=$(($i+1)) done
(6)创建和追加输入文件
- 可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件中。创建文件并输入内容的关键就是>。
- 还可以使用echo指令配合追加符号>> 向一个已经存在的文件末尾追加输入内容。
(7)调用shell程序的传参
- shell程序本身也可以在调用时传参给他。
- 在shell程序内部使用传参也是使用的一些特定符号来表示的
$# 参数个数(从$1开始算起) $0 解析程序的名字 $1 第1个参数 $n 第n个参数 (8) while循环和case语句和传参结合
- shell中的break关键字和C语言中意义相同(都是跳出)但是用法不同。因为shell中case语句默认不用break的,因此在shell中break只用于循环跳出。所以当while中内嵌case语句时,case中的break是跳出外层的while循环的,不是用来跳出case语句的。
- shell中的$# $1等内置变量的值不是不可变的,而是可以被改变,被shift指令改变。shift指令有点像左移运算符,把我们给shell程序的传参左移了一个移出去了,原来的$2变成了新的$1,原来的$#少了1个。
- uboot中的一段代码
x210:uboot和系统移植扩展--shell编程
最新推荐文章于 2023-12-19 21:40:04 发布