静态语言:编译型语言
强类型(变量) 事先转换成可执行格式
c c++ java c#
强类型语言的变量在使用前,必选事先声明,甚至需要初始化
动态语言:解释型语言
弱类型
边解释边执行
php shell python
弱类型语言,变量声明时,甚至不区分类型
编程能力:
脚本编译
变量类型:事先确定数据的存储格式和长度的
1Byte=8b 1(Byte)字节=8位(bit)
字符型
数值型
整型
浮点型
Bash变量类型
环境变量
本地变量(局部变量)
位置变量
特殊变量:$?
本地变量:
NAME=cary ----定义变量
echo $NAME ----引用变量
Local VARNAME=VALUE ----局部变量,作用域当前代码段
环境变量:作用域为当前shell进程及其子进程
export varname=value ----定义环境变量用export 导出关键字
脚本在执行时会启动一个子sehll进程
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行)
在SHELL语言中,‘’单引号不做变量替换,里面是什么就输出什么。
“”双引号做变量替换,里面有变量做变量替换输出
输出重定向
> ---覆盖追加
>> ---追加不覆盖
/dev/null --数据黑洞
撤销变量:unset varname
查看当前shell中的变量:set
查看当前shell中的环境变量:printenv 或者env 或者export
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
脚本的格式:脚本必须要以一个魔数开头
#!/bin/bash
其他行数以#开头都是表示注释
脚本的执行:脚本的执行必须有X的执行权限,并且需要指明路径
练习:写一个脚本
1.添加5个用户,user1,....user5
2.每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息
3.每个用户创建完成后,显示添加账号创建成功
#!/bin/bash
useradd user1
echo "user1" |passwd --stdin user1 >/dev/null
echo "add user1 successfully"
条件判断:
如果用户存在
添加用户,给密码并显示添加成功
否则
显示已经存在,没有添加
bash 中如何实现条件判断
条件测试类型:
整数测试
字符测试
文件测试
条件测试的表达式:
[ expression ]
test expression
整数比较:
-eq :测试两个整数是否相等:比如$A -eq $B
-ne :测试两个整数是否不等:不等为真,相等为假
-gt :测试一个数是否大于另一个数:大于,为真,否则,为假
-lt :测试一个数是否小于另一个数,小于,为真,否则,为假
-ge :大于或等于
-le :小于或等于
命令的逻辑关系:
逻辑与 &&:第一个条件为假时,第二个条件就不在判断,最终结果已经有
如果第一个条件为真是,第二个条件还需要判断
逻辑或 || :第一个条件为真时,第二个条件不执行
如果第一个条件为假时,还需要执行第二个条件
#!/bin/bash
!id user1 &>/dev/null && useradd user1 && echo "user1" |passwd --stdin user1 &>/dev/null ||echo "user1 exists"
!id user2 &>/dev/null && useradd user2 && echo "user2" |passwd --stdin user2 &>/dev/null ||echo "user2 exists"
!id user3 &>/dev/null && useradd user3 && echo "user3" |passwd --stdin user3 &>/dev/null ||echo "user3 exists"
USERS=`wc -l /etc/passwd |cut -d: -fl`
echo "$USERS USERS"
条件判断,控制结构:
单分支的if语句
if 判断条件; then
statement1
statement2
....
fi
eg:
#!/bin/bash
NAME=user1
if id $NAME &>/dev/null;then
echo "$NAME exsits"
fi
双分支的if语句
if 判断条件; then
statement1
statement2
.......
else
statement3
statement4
......
fi
eg:
NAME=cary.qin
if id $NAME &>/dev/null;then
echo "$NAME exists"
else
useradd $NAME
echo "$NAME" | passwd --stdin $NAME &>/dev/null
echo "add finished"
fi
`` ----反引号 命令的执行结果,把名称执行出的内容提供出来
shell的数值运算
A=3
B=6
1. let 算术运算表达式
let c=$A+$B
2. $[算术运算表达式]
c=$[$A+$B]
3.$((算术运算表达式))
c=$(($A+$B))
原文:http://xpqinqun.blog.51cto.com/2136/1795193