变量及shell编程
编程能力:
脚本编程
编程语言:机器语言,汇编语言,高级语言
高级语言:
静态语言:编译型语言
不需要借助额外的二进制,需要一个编译器,直接转换为二进制运行的。
强类型(变量):变量在使用前, 必须事先声明,甚至还需要初始化
关键字:
事先转换成可执行格式
c、c++、java、c#
动态语言:解释型语言 on the fly
弱类型语言:变量随时(用时)声明,不区分类型
边解释边执行
asp asp.net php shell python perl
面向过程:shell ,c,perl,
面积对象:java,python,perl,c++
变量类型:直接决定了变量的储存格式,用来确定数据的存储格式和长度
字符
数值
时期
真假型
逻辑运算:与(乘)、或、非、异或
1:真
0:假
1&0=0
0&1=0
0&0=0
1&1=1
或:只一一个为真就为真,同时为假就为假
非:!真=假 !假=真
异或:操作数相同者为假, 不同者为真,相同者为零,否者为1
与:只要有一个为假,结果为假
或:只要有一个为真,结果为真
整形
浮点型 11.23 1.123*10^1 | 0.1123*10^2
变量:内存空间,命名的内存空间,
变量名称:
1、只能包含字母,数字,下划线,并且不能数字开头。
2、不应该跟系统中已有的环境变量重名。
3、最好做到见名知义
内存:编址的存储单元
进程:
Bash变量类型:
引用变量:${VARNAME},默认{}可以省略,例:
ANIMAL=pig
echo "There are some ${ANIMAL}s."
1、环境变量:
作用域为当前shell进程及其子进程
exprot VARNAME=VALUE "导出"
脚本在执行时使用时会启动一个子shell进程
命令行启动的脚本会继承当时shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量
2、本地变量(局部变量)
bash:进程的变量
VARNAME=VALUE,本地变量,作用域为整个bash进程有用;
local VARNAME=VALUE,局部变量,作用域为当前代码段
3、位置变量
$1,$1,$2......
4、特殊变量(Bash内置的,也称系统变量)
是为了保存特殊数据的,例:$?:上一个命令的执行状态返回值;
程序执行结果
程序状态返回代码(0-255)
0:正确执行
1-255:错误执行,1,2,127系统预留:
撤消变量:
unset VARNAME
查看当前shell中变量:
set (包括环境变量和本地变量)
查看当前shell中的环境变量:
printenv
env
export
一个变量对应多个值:
ANIMAL=pig:dog:goat 或者:ANIMAL=$ANIMAL:pig
输出重定向:
>
>>
2>
2>>
&> 同时重定向
/dev/null
id student &> /dev/null
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
#!/bin/bash
#注释行,不执行
Bash中如何实现条件判断?
条件测试类型:
1、整数测试
2、字符测试
3、文件测试
条件测试的表达式:
[ expression ]
[[ expression ]]
test expression
整数比较:
需要两个操作数
-eq:测试两个整数是否相等,比如:$A -eq $B
[ $A -eq $B ]
-ne:测试两个整数是否不等,不等为真,相等为假
-gt:测试一个数是否大于另一个数,大于为真,否则为假
-lt:测试一个数是否小于另一个数,小于为真, 否则为假
-ge:大于或
-le:小于或等于
命令间的逻辑关系:
逻辑与:&& id user1 &> /dev/null && echo "hello user1"
第一个条件为假时,第二个条件不用判断,最终结果已经有了。
第一个条件为真时,第二个条件必须得判断
逻辑或:||
!id user6 && useradd user6 前面为假就不执行,为真就执行
id user6 || useradd user6 如果前面为真就不执行,为假就执行
如果用户存在,就显示用户已存在,否则就添加此用户:
id user1 && echo "use1 exists" || useradd user1
如果用户不存在,就添加,否则显示其已经存在
! id user1 && useradd user1 || echo "user1 exists"
如果用户不存在,添加并且给密码,否则,显示其已经存在;
!id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists"
例:
#!/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 user1 &> /dev/null || echo ""user3 exists."
USERS=`wc -l /etc/passwd | cut -d‘‘ -f1
echo "$USERS users"
#!/bin/bash
NAME=user1
USERID=`id -u $name`
[ $USERID -eq 0 ] && echo "This is root" || echo "This is not root"
条件判断,控制结构
单分支if语句:
if判断条件;then
statement1
statement2
...
fi
例:
#!/bin/bash
NAME=user1
if id $NAME &> /dev/null;then
ehco "$NAME exists."
fi
双分支的if语句:
if 判断条件;then
statement1
statement2
...
else
statement1
statement2
...
fi
例:
#!/bin/bash
NAME=user1
if id $NAME &> /dev/null;then
ehco "$NAME exists."
else
echo "$NAME not exist"
fi
#!/bin/bash
NAME=root
if [ `id -u $NAME` -eq 0 ]; then
echo "This is Admin"
else
echo "This is not Admin"
fi
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。