shell 编程
编程能力:脚本编程
本地变量;
varname=value 作用域为整个bash进程
局部变量
local varname=value 作为域当前代码段
环境变量 作用域为当前shell进程及其子进程
export varname=value
导出
脚本在执行时会启动一个shell进程
命令行中启动的脚本继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要
export NAME
位置变量
$1,$2.....
特殊变量
$? 上一个命令的执行状态返回值
程序执行,可能有两类返回值
程序执行结果
程序状态返回代码(0-255)
0 正确执行
1-255 错误执行, 1,2, 127 系统预留
输出重定向
>
>>
2>
2>>
&>
撤消变量
unset VARNAME
查看当前shell中变量
set
查看当前shell中环境变量
env
printenv
export
shell不能做算数运算
脚本:命令的堆砌,按实际需要,结合命令流程控制机制的实现的源程序
shebang : 魔数
#!/bin/bash
#!/usr/bin/python
#注释行
条件测试的表达式
[ expression ]
[ [expression ] ]
test expression
整数比较
-eq :测试两个整数是否相等 比如$A -eq $B 正确返回1
-ne :测试两个整烽是否不等 不等,为真,相等 为假
-gt :大于为真,否则为假
-lt :小于,为真 否则,为假
-ge :大于或等于
-le :小于或等于
命令的间逻辑关系
逻辑与 &&
逻辑或 || 一个为真时,第二个条件必须判断
id user &> /dev/null && echo "hello ,student"
练习
给定一个用户
1、如果其UID为0 ,就显示为管理员否则就显示是普通用户
变量名称
1、只能包含字母,数字
============================================================================================
条件判断,控制结构
if 判断条件; then
statement 1
statement 2
fi
if 判断条件;then
statement1
else
statement2
fi
[root@localhost shsh]# more two.sh
#!/bin/bash
NAME=wyj
if id $NAME &> /dev/null; then
echo "$NAME exists"
else
echo "这不是管理员"
useradd $NAME
echo $NAME | passwd --stdin $NAME &> /dev/null
echo "add $NAME"
fi
[root@localhost shsh]# more three.sh
#!/bin/bash
USERNAME=root
USERNAMEID=`id -u $USERNAME`
USERNAMEGID=`id -g $USERNAME`
if [ $USERNAMEID -eq $USERNAMEGID ];then
echo "good guy"
else
echo "bad guy"
fi
shell中如何做算数运算
A=3
B=6
1、let 算术运算表达式
let C=$A+$B
[root@localhost shsh]# a=3
[root@localhost shsh]# b=5
[root@localhost shsh]# let c=$a+$b
[root@localhost shsh]# echo $c
8
2、$[算术运算表达式]
C=$[$A+$B]
[root@localhost shsh]# c=$[$a+$b]
[root@localhost shsh]# echo $c
8
3、$((算术运算表达式))
C=$(($A+$B))
[root@localhost shsh]# d=1
[root@localhost shsh]# f=6
[root@localhost shsh]# i=$(($d+$f))
[root@localhost shsh]# echo $i
7
4、expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
c=`expr $a +$b`
[root@localhost shsh]# j=`expr $a + $b`
[root@localhost shsh]# echo $j
8
[root@localhost shsh]#
===================================================================================================
脚本编程之四 整数测试及特殊变量
if ! grep "^$USERNAME\>" /etc/passwd &> /dev/null; then
echo "错误"
fi
bash中常用的条件测试有三种
整数测试
双目测试
-gt
-eq
-ge
-lt
文件测试
[ expression ]
[ [ expression ] ]
test expression
[ $a -eq $b ]
[ [ ] ]
文件测试
-e FILE 测试文件是否存在
-f FILE 测试文件是否为普通文件
-d FILE 测试指定路径是否为目录
-r FILE 测试当前用户对指定文件是否有读取权限
-w FILE 测试当前文件是否有写权限
-x
[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ]
[root@localhost shsh]# more five.sh
#!/bin/bash
FILE=/etc/inittab
if [ ! -e $FILE ];then
echo "NO $FILE"
exit 8
fi
[root@localhost shsh]# ./five.sh
d /etc/initta1b
[root@localhost shsh]# more five.sh
#!/bin/bash
#对文件取返,输出不存在文件名
FILE=/etc/initta1b
if [ ! -e $FILE ];then
echo "d $FILE"
exit 8
fi
[root@localhost shsh]#