p18

编程语言:机器语言,汇编语言,高级语言

静态语言:编译型语言
强类型语言
事先转换成可执行格式后才可执行【C、C++、JAVA】

动态语言:解释性语言
弱类型语言
边解释边执行【Python、shell、PHP、perl】

强类型语言的变量在使用前,必须事先声明,甚至还需要初始化。
弱类型语言变量在用时声明即可,甚至不区分变量类型
shell是一种弱类型编程语言

面向过程:Shell、C
面向对象:JAVA、Python、perl、C++

采用不同的变量类型存储同一种变量所需要的内存空间也不同(字符10需要16bit,数字10需要8字节)

变量:是一种内存空间

变量类型:事先确定数据的存储格式和长度
字符
数值:整型、浮点型
布尔型

bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量

本地变量:
VARNAME=VALUE 作用域为整个bash进程

局部变量:
local VARNAME=VALUE 作用域为当前代码段

环境变量
export VARNALE=VALUE 作用域为当前shell进程及子进程

位置变量
$1、$2

特殊变量
$?:上一个命令的执行状态返回值
程序执行可能有两类返回值
程序执行结果
程序状态返回代码(0-255):0表示正确执行

/dev/null 是一个数据黑洞,不想要执行结果的话可以将输出结果重定向到改文件中。

脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要个环境变量

撤销变量:unset VARNAME
查看shell变量 :set
查看当前shell中的环境变量:printenv、env、export

变量叠加

QQ截图20220127162222.png

  1. id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo "user1 exists"

P19

条件测试类型:
整数测试
字符测试
文件测试

条件测试表达式
[ expression ]
[[ expression ]]
test expression

整数比较:
-eq:测试两个整数是否相等。相等为真,不等为假
-ne:测试两个整数是否不等。不等为真,相等为假
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于

命令间的逻辑关系:
逻辑与:&&,第一个条件为假时,第二条件不在判断,最终结果已确定。第一个条件为真时,第二条件必须判断。
逻辑或:|| 第一个条件为真时,第二个条件不在判断。第一个条件为假,第二个条件必须判断。
逻辑非:!

如果用户user6不存在,就添加用户user6

  1. id user6 && useradd user6
  2. id user6 || useradd user6

如果用户存在,就显示用户已存在,否则就添加用户

如果用户不存在,就添加,否则显示其已存在

条件判断,控制结果

单分支if语句:
if 判断条件;then
command1
command2
…………
fi

双分支if语句:
if 判断条件;then
command1
command2
else
command3
command4
fi

shell中的算术运算
A=3
B=6
1、let 算术运算表达式
let C=$A+$B #+号左右两边不能有空格
2、$[算术运算表达式]
C=$[$A+$B]
3、$((算术运算表达式))
C=$(($A+$B))
4、expr算术运算表达式,表达式中个操作数及运算符之间要有空格,而且要使用命令引用
C=expr $A + $B

P20

QQ截图20220129155536.png

定义脚本退出状态码

exit
如果没有定义明确的状态退出码,那么最后执行的一条命名的退出码即为脚本的退出状态码。

练习3

  1. #/bin/bash
  2. USERNAME=xlw
  3. #首先要判断用户是否存在,不存在还要执行后面的命令就浪费资源
  4. if ! grep "^$USERNAME\>" /etc/passwd &> /dev/null; then
  5. echo "NO such user:$USERNAME"
  6. exit 1 #指定退出码
  7. fi
  8. userid=`id -u ${USERNAME}`
  9. groupid=`id -g ${USERNAME}`
  10. if [ $userid -eq $groupid ]
  11. then
  12. echo "${USERNAME} is good guy"
  13. else
  14. echo "${USERNAME} is bad guy"
  15. fi