计算机基础篇之五
目录
1)环境变量 2)本地变量(局部变量) 3)位置变量 4)特殊变量(内置的系统变量)
【1】本地变量:作用域为整个bash进程 ###示例### [root@xiaofu ~]# NAME=1 [root@xiaofu ~]# echo $NAME 1 [root@xiaofu ~]# bash #子bash并不继承父bash的变量 ###引用变量的方式### echo ${变量名} #{}可以省略 [root@xiaofu ~]# echo $NAME [root@xiaofu ~]# 【2】环境变量:作用域为当前bash进程及其子进程 ###示例1### [root@xiaofu ~]# export XIAOFU=2 [root@xiaofu ~]# echo $XIAOFU 2 [root@xiaofu ~]# bash [root@xiaofu ~]# ps PID TTY TIME CMD 13318 pts/1 00:00:00 bash 13354 pts/1 00:00:00 bash 13365 pts/1 00:00:00 ps [root@xiaofu ~]# echo ${XIAOFU} #子bash进程依然继承父bash进程的环境变量 2 [root@xiaofu ~]# ###示例2### [root@xiaofu ~]# XIAOFU=3 [root@xiaofu ~]# export XIAOFU [root@xiaofu ~]# bash [root@xiaofu ~]# ps PID TTY TIME CMD 13318 pts/1 00:00:00 bash 13354 pts/1 00:00:00 bash 13367 pts/1 00:00:00 bash 13378 pts/1 00:00:00 ps [root@xiaofu ~]# echo $XIAOFU 3 [root@xiaofu ~]# ###解释说明### 脚本在执行时会启动一个子shell进程 命令行中启动的脚本会继承当前shell环境变量 系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量 【位置变量】如:$1,$2,$#(参数的个数),$*/$@(参数列表) 【特殊变量】如:$?,$#,... ###示例### $? #保存上一个命令执行状态返回值 ###注释### 程序执行后,可能有两种值 1)程序的执行结果 2)程序状态返回代码,范围是0-255 #"0"表示正确执行 #"1-255"表示错误执行,其中"1","2","127"是系统预留 ###示例### [root@xiaofu ~]# tail -1 /etc/passwd zs:x:1000:1000:zs:/home/zs:/bin/bash [root@xiaofu ~]# echo $? 0 [root@xiaofu ~]# tail -1 /etc/passwd1 tail: cannot open ‘/etc/passwd1’ for reading: No such file or directory [root@xiaofu ~]# echo $? 1 ###查看当前SHELL中的所有变量###:set ###撤销变量###:unset 变量名 ###查看当前SHELL的环境变量###:printenv,env,export
【1】整数测试 【2】字符串测试 【3】文件测试
###条件测试的表达式### 1)[ 表达式 ] #"表达式前后有空格,否则语法错误" 2)[[ 表达式 ]] # 同上 3)test 表达式 ################################################# 【整数比较】 -eq 等于 -ne 不等于 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于 ###逻辑运算符### 逻辑与:一个为假,一定为假,bash用"&&"表示 逻辑或:一个为真,一定为真,bash用"||"来表示 逻辑非:!真=假 bash用"!"表示 逻辑异或:只有两个值都为真则为假(0) ###示例1### [root@xiaofu home]# id zs &> /dev/null && useradd zs [root@xiaofu home]# id zs #当前系统没有"zs"的用户【逻辑与】 id: zs: no such user [root@xiaofu home]# id zs &> /dev/null || useradd zs #当前系统没有"zs"用户【逻辑或】 [root@xiaofu home]# id zs uid=1000(zs) gid=1000(zs) groups=1000(zs) [root@xiaofu home]# ###示例2### #!/bin/bash # example of create user01... #如果用户存在,显示已存在,并更改密码,否则添加用户,设置密码 #id user01 &> /dev/null && echo "user01已存在并更改密码" && echo "user01" | passwd --stdin user01 &>/dev/null || useradd user01 || echo "user01" | passwd --stdin user01 &> /dev/null #如果不存在,就添加并设置密码,否则显示已存在 ! id user01 &> /dev/null && useradd user01 && echo "user01" | passwd --stdin "user01" &> /dev/null && echo "新建用户并设>置密码成功"|| echo "已存在" 文件测试参数 [ -f ]测试文件是否为普通文件 [ -d ] 测试指定路径是否为目录 [ -e ] 测试文件是否存在 [ -r/wx ] 测试当前用户对指定文件是否有都/写/执行权限 [ = ] 比较字符串内容是否相同 [ != ] 比较字符串内容是否不同 [ -z ] 判断字符串内容是否为空
【单分支】
if 判断条件;then
语句1... #不要求缩进,但是建议有缩进
语句2...
fi
【双分支语句】
if 判断条件;then
语句1...
语句2...
else
语句3...
语句4...
fi
【多分支语句】
if 判断条件1;then
语句1
...
elif
语句2
...
...
else
语句3
...
fi
###示例"单分支"### #!/bin/bash # example of if单分支... NAME=user01 if id $NAME &> /dev/null;then echo "$NAME 已经存在" fi ###示例"双分支"###
###示例1### #!/bin/bash # example of if双分支... NAME=user01 if id $NAME &> /dev/null;then echo "$NAME 已经存在" else useradd $NAME && echo "user01" | passwd --stdin user01 &> /dev/null && echo "添加用户成功" fi
###示例2###
[root@python sh]# cat bash用户.sh
#!/bin/bash
#"查看当前shell中有多少个默认shell是bash"
grep "\<bash$" /etc/passwd &> /dev/null
RET=$?
if [ $RET -eq 0 ];then
USERS=`grep "\<bash$" /etc/passwd | wc -l`
# AUSER=`grep "\<bash$" /etc/passwd | head -1 | cut -d: -f1`
echo "有$USERS个bash的用户"
else
echo "Nothing"
fi
###示例3###
[root@python sh]# cat file1.sh
#!/bin/bash
#给定一个文件,如果是一个文件,就显示,如果时目录,也显示,否则,此为非法文件
FILE=/etc/fstab
if [ ! -e $FILE ];then
echo "无此文件"
exit 2 #退出此脚本,如果没指定"exit"则脚本按照最后一次输入的命令进行判断,数字可自定义,0为正确执行,1-255为错误执行
fi
if [ -f $FILE ];then
echo "普通文件"
elif [ -d $FILE ];then
echo "目录"
else
echo "无法识别此文件"
fi
###示例4###
[root@python sh]# cat time.sh
#!/bin/bash
#指定用户“user01”获取其密码警告期限,判断密码使用期限是否小于警告期限,如果小于则显示"Warning",否则显示"OK"
W=`grep "user01" /etc/shadow | cut -d: -f6`
S=`date +%s`
T=`expr $S/86400`
L=`grep "user01" /etc/shadow | cut -d: -f5`
N=`grep "user01" /etc/shadow | cut -d: -f3`
SY=$[ $L-$[$T-$N] ]
if [ $SY -lt $W ];then
echo "Waring"
else
echo "OK"
fi
###示例5###
[root@python sh]# cat cacl.sh
#!/bin/bash
#给脚本两个参数,显示参数之和及相乘
if [ $# -lt 2 ];then
echo "ERROR"
exit 2
fi
echo "参数之和is:$[$1+$2]"
echo "参数相乘is:$[$1*$2]
###示例### [root@python sh]# a=1 [root@python sh]# b=2 ###示例方式1### [root@python sh]# let c=$a+$b [root@python sh]# echo $c 3 ###示例方式2### [root@python sh]# d=$[$a+$b] [root@python sh]# echo $d 3 ###示例方式3### [root@python sh]# e=$(($a+$b)) [root@python sh]# echo $e 3 ###示例方式4### [root@python sh]# h=`expr $a + $b` [root@python sh]# echo $h 3
THE END

浙公网安备 33010602011771号