1.编程语言:机器语言,汇编语言,高级语言
静态语言:编译型语言
强类型(变量)
事先转换成可执行格式
c,c++,java,c#
动态语言:解释型语言
弱类型
边解释边执行
php,shell,python,perl
面向过程:shell,c
面向对象:java,python,perl,c++
变量:内存空间,命令
内存:编址的存储单元
变量类型:事先确定数据的存储格式和长度
条件测试:
整数测试
字符测试
文件测试
条件测试的表达式:
[ expression ]
[[ expression ]]
test expression
整数测试:
-eq 测试两个整数是否相等;等于为真,不等为假。比如: $A -eq $B
-ne 测试两个整数是否不等;不等为真,相等为假。
-gt 测试一个数是否大于一个数;大于为真,否则为假。
-lt 测试一个数是否小于一个数;小于为真;否则为假。
-ge 大于或等于
-le 小于或等于
文件测试:
-e FILE :测试文件是否存在
-f FILE :测试文件是否为普通文件
-d FILE :测试指定路径是否为目录
-r FILE :测试当前用户是否对指定文件有读权限
-w FILE :测试当前用户对文件是否有写权限
-x FILE :测试当前用户对文件是否有执行权限
字符串测试:
== 或者 = :判断是否相等,相等为真,不等为假 (用的时候等号两边需要打空格,如: [ $A == $B ]
!= :判断是否不相等
> :
< :
-n string :测试指定字符串是否为空,空为真,不空为假
-z string :测试指定字符串是否不空,不空为真,空则为假
组合测试条件:
-a :与关系 eg: if [ $# -gt 1 -a $# -le 3 ] 参数个数大于1并且小于等于3 ( if [ $# -gt 1 ] && [ $# -le 3 ] )
-o :或关系
! :非关系
命令间逻辑关系:
逻辑与: &&
逻辑或: ||
面向过程:(控制结构)
顺序结构
选择结构 (if:单分支,双分支,多分支)
循环结构
条件判断,控制结构:
1.单分支的if语句
if 判断条件; then
statement1
statement2
...
fi
2.双分支的if语句:
if 判断条件; then
statement1
...
else
statement2
...
fi
3.多分支的if语句:
if 判断条件1; then
statement1
...
elif 判断条件2; then
statement2
...
else
statement3
..
fi
case语句:选择结构(双分号结尾)
case SWITCH in
value1)
statement
...
;;
value2)
statement
...
;;
...
esac
循环
for
while
until
1.for 变量 in 列表; do
循环体
done
2. 进入循环:条件满足
while CONDITION; do
statement
done
3.进入循环: 条件不满足
until CONDITION; do
statement
done
4. for (( expr1 ; expr2 ; expr3 )) ;do
循环体
done
2. 进入循环:条件满足
while CONDITION; do
statement
done
3.进入循环: 条件不满足
until CONDITION; do
statement
done
4. for (( expr1 ; expr2 ; expr3 )) ;do
循环体
done
如何生成列表:
{1..100} :表示1到100
`seq [起始数 [步进长度] ] 结束数` eg: seq 1 3 10
测试脚本是否有语法错误:
bash -n filetest.sh
变量名称:
1.只能包含字母,数字和下划线,并且不能数字开头,
2.不应该跟系统中已有的环境变量重名,
3,最好做到见名知义
如果用户存在,就显示用户已存在;否则,就添加此用户
id user && echo "user exists" || useradd user
如果用户不存在,就添加;否则,显示用户已经存在
! id user && useradd user || echo "user exists"
如果用户不存在,添加并且给密码;否则,显示其已经存在;
! id user && useradd user && echo 'user'| passwd --stdin user || echo "user exists"
shell中如何进行算术运算:
1. let 算术表达式
eg: let C=$A+$B
2. $[算术运算表达式]
eg: C=$[$A+$B]
3. $((算术运算表达式))
eg: C=$(($A+$B))
4. expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
eg:C=`expr $A +$B`
eg: let I+=1 相当于 let I++ 相当于 let I=$I+1
bc命令:
echo "scale=2;111/22;" |bc
bc <<< "scale=2;111/22;"
2.脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序。
eg:添加用户,user1, 用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果;每个用户添加完成后,都要显示用户某某已经添加成功;
===============
#!/bin/bash
!id user1 &>/dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &>/dev/null && echo "add user1 finished." || echo "user1 exists"
======
#!/bin/bash
NAME=user1
if id $NAME &>/dev/null ; then
echo "$NAME exsits;"
else
useradd $NAME
echo $NAME | passwd --stdin $NAME &>/dev/null
echo "add $NAME finished."
fi
3 eg:
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
read -p "your choice:" CHOICE
while [ $CHOICE != 'quit' ] ;do
case $CHOICE in
d|D)
echo "disk usage: "
df -Ph ;;
m|M)
echo "memory usage: "
free -m | head -2 ;;
s|S)
echo "swap usage: "
free -m | head -1
free -m | tail -1 ;;
*)
echo "Unknown.." ;;
esac
read -p "Again,your choice:" CHOICE
done