Bash基本特性:
首先得从逻辑运算来说起:
与运算 &&
两个判断条件都必须为真时,状态才为真,否则都为假,在此1是真,0是假
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0
或运算 ||
两个判断条件中都必须为假时,那么这个或运算就为假
0 || 0 = 0
0 || 1 = 1
1 || 0 = 1
1 || 1 = 1
非运算 !
!1=0 //这里的意思就是,不是真,那就是假
!0=1
echo $? //用来查看上一个命令执行是否成功。
“进程生命周期”的知识:
当一个进程执行完毕时,该进程会调用一个名为 _exit 的例程来通知内核它已经做好“消亡”的准备了。该进程会提供一个退出码(一个整数)表明它准备退出的原因。按照惯例,0用来表示正常的或者说“成功”的终止。
也就是说我们在执行 echo $? 时反回的值就是进程的退出码。而且,这个退出码是由刚刚执行完的进程提供给系统内核的。//了解一下就好,知道怎么用好了
来下列示题来演示一下:
ls /var && echo "successful" //这里的意思就是如果ls命令能够执行成功,那么也就会输出successful,状态值就是真的
ls /var && echoo "successful" //这里ls命令能够执行成功,但是echo命令确写错了,所以这两个命令在一起,最后得到的状态也是假的
lss /var && echo "successful" //两个命令都是错的,所以最后得到的状态也是假的。
ls /var || echo "successful" //两个命令都能正确执行,所以最后得到的状态是真的
ls /var || echoo “successful” //ls命令是错的,所以最后得到得状态是真的
lss /var || echoo "successful" //这两个命令都不能成功执行,所以按照或运算的规则,那么得到的状态值就是假的
bash变量种类:
可分为三种变量:
本地变量:生效范围为当前shell进程,对当前shell之外的其他shell进程包括当前shell的子shel进程均无效
环境变量:生效范围为当前shell进程和子进程
局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
位置变量:$1,$2,$3....,用于入脚本在代码中调用通过命令行传递缎带它的参数
特殊变量:
$? :上个命令执行成功与否的结果0为成功,其它都为假
$0 :表示命令本身
$# :传递给脚本参数的个数
$* :传递给脚本的所有参数
[email protected] :引用传递给脚本的所有参数
变量名的命名法则:
不能使用程序中的保留字如:if,for...
只能使用数字、字母、下划线、且不能使用数字开头
变量赋值:
1、可以直接赋值字符串:name="string"
2、变量引用:name="$string"
3、命令引用:name=`COMMAND` 或 name=$(COMMAND) 也就是相当于你调用这个变量的时候,它自动的在shell中执行一遍,在返回给你的值。
变量引用:$name 或 ${name}
弱引用 “” 其中的变量引用会被为变量值
强引用 ‘’ 其中的变量不会被替换为变量值,而保持原字符串不变
显示已定义的变量:set
取消变量:unset name
环境变量:
赋值、声明:
export name=VALUE
delcare -x name=VALUE
变量引用$name ${name}
显示所有环境变量:
export
env
printenv
bash的配置文件:
全局的是:/etc/profile.d/*.sh 结尾的文件,也可以自己写文件在执行一下
/etc/profile
个人配置文件:~/.bash_profile
~/.bashrc
在文件中写好后,可以执行
source file //file就是你写的配置文件,就可以在当前shell中生效了
bash中的算术运算:
操作符有:+、—、*、/、%、**
算术运算的实现方式:
1、let Var_Name=EXPRESSION
2、$[EXPRESSION]
3、$((EXPRESSION))
增强型复制:
+=、-=、*=、/=、%=、
例如:
let count+=1 即 let count=count+1
自增、自减
let var+=1 即 let var++
let var-=1 即 let var--
接下来就是比较重要的条件测试 了:
条件测试:
判断某需求是否满足,需要有测试机制来实现,
Note:专用的测试表达式需要有测试命令辅助完成测试过程:
测试命令有:
1、test EXPRESSION
2、[ EXPRESSION ]
3、[[ EXPRESSION ]]
注意:EXPRESSION前后必须有空白字符!
bash的测试类型:
数值测试:
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
字符串测试:
== 是否等于
> 是否大于
< 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATERN所匹配
-z "string" 测试字符串是否为空,空测为真,不空则为假
-n "string" 测试字符串是否为不空,不空则为真,空则为假
文件测试
1、存在必测试:
-a FILE (少用)
-e FILE 文件存在测试,存在为真,否则为假
2、存在性及类别测试:
-b FILE 是否存在且为块设备
-c FILE 是否存在且为字符设备
-f FILE 是否存在且为普通文件
-d FILE 是否存在且为目录文件
-h FILE 或 -L FILE 是否存在且为符号链接
-s FILE 是否存在且为套接字文件
-p FILE 是否存在且为管道文件
3、文件权限测试:
-r FILE 是否存在且可读
-w FILE 是否存在且可写
-x FILE 是否存在且可执行
4、文件特殊权限测试:
-g FILE 是否存在且拥有sgid权限
-u FILE 是否存在且拥有suid权限
-k FILE 是否存在且拥有sticky权限
5、文件大小测试:
-s FILE 是否存在且为空