笔记:shell编程 变量 分支 关系运算[马哥linux ]

来源:互联网 发布:淘宝助手有什么用处 编辑:程序博客网 时间:2024/05/21 10:05
shell编程:

编译器,解释器

编程语言:机器语言、汇编语言、高级语言

静态语言:编译型语言
 强类型(变量)
 事先转换成可执行格式
 C、C++、JAVA、C#
 
 
 
动态语言:解释型语言, on the fly
 弱类型
 边解释边执行
 PHP、SHELL、python、perl

 
面向过程:Shell, C
面向对象: JAVA, Python, perl, C++

变量:内存空间,命名

内存:编址的存储单元

进程:
1+100:
1+1000000
1

变量类型:事先确定数据的存储格式和长度
 字符
 数值
  整型
  浮点型: 11.23, 1.123*10^1, 0.1123*10^2
 2013/10/10, 64bit
 99999: 24bit,
 真、假
 
 
逻辑:1+1>2
逻辑运算:与、或、非、异或
1: 真
0: 假

1 & 0  = 0
0 & 1 = 0
0 & 0 = 0
1 & 1 = 1

或:

非:
! 真 = 假
! 假 = 真

shell: 弱类型编程语言

强:变量在使用前,必须事先声明,甚至还需要初始化;
弱:变量用时声明,甚至不区分类型;

变量赋值:VAR_NAME=VALUE



bash变量类型:
 环境变量
 本地变量(局部变量)
 位置变量
 特殊变量
 
本地变量:
set VARNAME=VALUE: 作用域为整个bash进程;

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

环境变量:作用域为当前shell进程及其子进程;
export VARNAME=VALUE
VARNAME=VALUE
export VARNAME
 “导出”

位置变量:
$1, $2, ...

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

程序执行,可能有两类返回值:
 程序执行结果
 程序状态返回代码(0-255)
  0: 正确执行
  1-255:错误执行,1,2,127系统预留;
 
输出重定向:
>
>>
2>
2>>
&>

撤消变量:
unset VARNAME

查看当shell中变量:
set

查看当前shell中的环境变量:
printenv
env
export

脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序

shebang: 魔数
#!/bin/bash
# 注释行,不执行



/dev/null: 软件设备, bit bucket,数据黑洞

 
脚本在执行时会启动一个子shell进程;
 命令行中启动的脚本会继承当前shell环境变量;
 系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
 


练习:写一个脚本,完成以下任务
1、添加5个用户, user1,..., user5
2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;
3、每个用户添加完成后,都要显示用户某某已经成功添加;
useradd user1
echo "user1" | passwd --stdin user1 &> /dev/null
echo "Add user1 successfully."


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

bash中如何实现条件判断?
条件测试类型:
 整数测试
 字符测试
 文件测试

条件测试的表达式:
 [ expression ]
 [[ expression ]]
 test expression
 
整数比较:
 -eq: 测试两个整数是否相等;比如 $A -eq $B
 -ne: 测试两个整数是否不等;不等,为真;相等,为假;
 -gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
 -lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
 -ge: 大于或等于
 -le:小于或等于
 
命令的间逻辑关系:
 逻辑与: &&
  第一个条件为假时,第二条件不用再判断,最终结果已经有;
  第一个条件为真时,第二条件必须得判断;
 逻辑或: ||
 
如果用户user6不存在,就添加用户user6
! id user6 && useradd user6
id user6 || useradd user6

如果/etc/inittab文件的行数大于100,就显示好大的文件;
[ `wc -l /etc/inittab | cut -d' ' -f1` -gt 100 ] && echo "Large file."

变量名称:
 1、只能包含字母、数字和下划线,并且不能数字开头;
 2、不应该跟系统中已有的环境变量重名;
 3、最好做到见名知义;

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

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

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


练习,写一个脚本,完成以下要求:
1、添加3个用户user1, user2, user3;但要先判断用户是否存在,不存在而后再添加;
2、添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;
3、最后显示当前系统上共有多少个用户;



练习,写一个脚本,完成以下要求:
给定一个用户:
 1、如果其UID为0,就显示此为管理员;
 2、否则,就显示其为普通用户;

如果 UID为0;那么
  显示为管理员
否则
  显示为普通用户
 
NAME=user16
USERID=`id -u $NAME`
if [ $USERID -eq 0 ]; then
  echo "Admin"
else
  echo "common user."
fi



NAME=user16
if [ `id -u $NAME` -eq 0 ]; then
  echo "Admin"
else
  echo "common user."
fi
2 0
原创粉丝点击