----来源于网络整理。
1、shell编程只有一种数据类型:字符串类型
2、变量:
1)环境变量:(类似全局变量)
printenv 显示当前shell的环境变量(或者 env 命令)
2)本地变量:(类似局部变量)
可以自己定义变量:
VAR=hello ----->定义了一个变量---->默认是本地变量
echo $VAR ----->打印变量的值,变量前面要加$
将本地变量变为环境变量:
export VAR
env |grep $VAR -------->查看变量,已经能看到了。
有无$的区别:有的话,找的是变量的值,没有的话,找的是变量的名。
unset 变量 ------->删除定义的本地变量或环境变量。
3、文件名代换
* 任意多字符
?匹配一个字符
[] 匹配括号中任意一个字符的一次出现-----[]只占一个字符
ls file[0-9].c
4、命令代换
方法1:“`”----tab建上的那个反引号
VAL=`date`
这样 echo $VAL 就能执行date 命令
方法2:将命令用$()括起来
VAL=$(date)
5、算数代换
VAL=10
echo $(($VAL+1))
echo $((VAL+1))
echo $[VAL+1] -------->最简单
echo $[$VAL+1]
四种方法效果一样。
echo $[2#10+1] 二进制10 +十进制1
6、转义字符
文件名中有特殊字符需要转义 touch \$file
rm 的时候,也需要在文件名中加转义字符
特殊情况:
touch ---abc ------>带-的情况
方法一:
touch ./---abc
rm ./---abc ----->否则删不掉。
方法二:
touch -- -abc
rm -- -abc
7、单引号
当输出的字符串需要添加“”的时候,此时就需要用单引号把字符串引起来(使用转义字符也能做到),因为单引号会将引起来的内容原样输出。
单引号,会将其中的内容原样输出,即便是变量,也不会当做变量
8、双引号
双引号一般情况下是 与 不加双引号的情况一样的。
双引号和单引号的嵌套: 要原样输出双引号,则需要单引号来引;要原样输出单引号,则需要双引号来引;
双引号中引的是变量,会输出变量的值(因为跟不加引号一样),echo "$var" ------>会输出 $var的值。
单引号中引的是变量,会将变量名输出:echo '$var' ------>会输出 $var
特殊情况:
echo "$VAL" ,当VAL= 的形式是,即VAL的值为空, VAL的值用来比较时,不加双引号会出错,所以,加“”更安全一些。
小结:当变量取值的时候,建议要用双引号括起来。
9、条件测试
test 或 [ 命令测试一个条件是否成立,成立返回0,不成立返回1
-gt
| 大于 |
-ge | 大于等于 |
-lt | 小于 |
-le | 小于等于 |
-eq | 等于 |
-ne | 不等于 |
形式如下例子:
var=100
test $var -gt 100
以上的关系判断仅适用于整数或值为整数的变量
-d DIR | 判断是否是目录 |
-f FILE | 判断是否是普通文件 |
-z STRING | 判断字符串长度是否为0 |
-n STRING | 判断字符串长度是否不为0 |
注意:
= | 判断字符串或数值是否相等 |
!= | 判断字符串或数值是否不相等 |
string1 = string2 ---->两个字符串相同为真,返回0----->等号两边必须要有空格
string1 != string2 ---->两个字符串不相同为真,返回0-----> !=两边必须要有空格
test命令可以替换为[命令
[ -f file.c ]----------->[ 后边有空格 ]前边有空格
因为这是命令与 参数的关系。
示例:
var=hello ------------>字符串的长度不为空,变量不加双引号也没有关系。
[ -n $var ]
var= ------------->字符串的长度为空,变量必须加双引号,否则出错。
[ -n "$var" ]
echo $?----------------->为假,返回1
[ -n $var ]
echo $?----------------->返回0------------>与实际情况不符。
小结:取变量值的时候,尽量加“”,肯定不会出错。
10、逻辑表达式
[ ! EXPR ] ------>EXPR可以是上述中的任意一种测试条件,!表示逻辑非
[ EXPR1 -a EXPR2 ] ------>EXPR1\EXPR2为上述任意一种测试条件,-a表示逻辑与
[ EXPR1 -o EXPR2 ] ------>EXPR1\EXPR2为上述任意一种测试条件,-o表示逻辑或
示例:
[ -d Desktop -a $VAR = "HELLO" ] ------>注意:[]两边和=两边的空格
逻辑运算也可以使用 && 和 ||
注意短路运算