shell编程笔记一


shell编程:
bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量(内置)

本地变量:
varname=value:作用域为整个bash进程可以使用;
变量命名规范:
1. 只能含字母、数字和下划线,并且以字母和下划线开头
2. 最好不要跟系统已有的环境变量重名
3. 见名知意

局部变量:
local varname=value:作用域为当前代码段;

环境变量:作用域为当前shell进程及其子进程,不能影响到其父进程;
export varname=value “导出”,如果变量已经定义可以只是用变量名 export varname,即
1. export varname=value
2. varname=value
export varname
脚本在执行命令时会启动一个子shell环境变量:
系统自动执行的脚本(非命令行启动)就需要自我定义需要的个环境变量;


位置变量:
$1,$2,$3,……


特殊变量:
$?:上一个命令执行状态的返回值:

程序执行可能有两种返回值:
1. 程序执行结果
2. 程序状态返回吗(0-255)
0 则为执行正确
1-255 则执行出错(1,2,127系统预留);


bash:

引用变量:${varname},括号可以省略


撤销变量:
unset varname

查看当前shell中的变量:
set
包括环境变量和本地变量

查看当前shell中的环境变量:
1. printenv
2. env
3. export

条件判断:
如果用户不存在:
添加用户,给密码并显示添加成功;
否则
显示用户已经存在,没有添加;

bash中条件判断:
条件测试类型:
1. 整数测试
2. 字符测试
3. 文件测试


条件测试的表达式:
1. [ expression ]
2. [[ expression ]]
3. test expression
整数比较:
-eq:测试两个整数是否相等;比如 $A -eq $B,如果A与B变量的值相等,则返回0,否则返回非0值
-ne:测试两个整数是否不等;相等为假,不等为真
-gt: 测试一个数是否大于另一个数;大于为真,否则为假
-lt: 测试一个数是否小于零一个数;小于为真,否则为假
-ge:测试一个数是否大于或等于另一个数;大于或等于为真,否则为假
-le: 测试一个数是否小于或等于另一个数;小于或等于为真,否则为假

命令间的逻辑关系:
逻辑与:&&
第一个条件为假时,第二个条件不会被执行
第一个条件为真时,第二个条件会被执行,作为结果
逻辑或:||
第一个条件为真时,第二个条件不会执行,结果为真
第一个条件为假时,第二个条件会被执行,作为结果


1.单分支的if语句:
if 判断条件; then
statement1
statement2
……
fi
2. 双分支的if语句:
if 条件判断; then
statement1
statement2
……
else
statement1
statement2
……
fi

如果then与if不在同一行,则“;”可以省略,如果在同一行,则不可省略。fi必须独占一行

如果用户存在,就显示用户已存在;否则,就添加此用户
id user1 && echo "user1 exist" || useradd user1

如果用户不存在,就添加;否则显示其已经存在
! id user1 && useradd user1 || echo "user1 exists."

如果用户不存在,就添加并设置密码,否则,显示其已经存在:
! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists."

shell脚本练习:
练习一要求:
1. 添加5个用户,user1, user2, ……, user5;
2. 每个用户的密码同用户名,且要求,添加密码完成后不显示passwd命令的执行结果信息;
3. 最后显示当前系统上一共有多少个用户;
#useradd user1
#echo "user1" | passwd --stdin user1 &> /dev/null
#echo "Add user1 successfully."
! id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo "user1 exists."
! id user2 &> /dev/null && useradd user2 && echo "user1" | passwd --stdin user2 &> /dev/null || echo "user2 exists."
! id user3 &> /dev/null && useradd user3 && echo "user1" | passwd --stdin user3 &> /dev/null || echo "user3 exists."
! id user4 &> /dev/null && useradd user4 && echo "user1" | passwd --stdin user4 &> /dev/null || echo "user4 exists."
! id user5 &> /dev/null && useradd user5 && echo "user1" | passwd --stdin user5 &> /dev/null || echo "user5 exists."

USERS=`wc -l /etc/passwd | cut -d: -f1`
echo "$USERS users"

练习二要求:
给定一个用户,如果其UID为0,就显示此为管理员用户;否则,就显示其为普通用户;
NAME=user1
USERID=`id -u $NAME`
[ $USERID -eq 0 ] && echo "root" || echo "common user."



算数运算:
A=4
B=4
1. let 算数运算表达式
let C=$A+$B
2. $[算数运算表达式]
C=$[$A+$B]
3. $((算术运算表达式))
C=$(($A+$B))
4. expr 算数运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
C=`expr $A + $B`

相关内容