一 bash的变量类型
bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量
bash中的变量分为四种 一 是环境变量 二 是本地变量 三是局部变量,每种变量的作用域不一样。环境变量作用于当前shell 及其子shell 。本地变量 紧作用于当前shell。局部变量紧作用于当前shell中一段代码。
1.1 环境变量的定义 export VALNAME=VALUE
注意:***命令行执行的脚本程序都是要新建一个进程,其执行过程就是开启子shell,因此环境变量对子进程是有效的。但是系统默认执行的脚本 是不需要开开启子shell的,但是他是需要定义环境变量的!
1.2 本地变量的定义 VALNAME=VALUE
1.3 局部变量的定义 local VALNAME=VALUE
1.4位置变量
$1 $2 $3 第一个位置 第二个位置 第三个位置
5特殊变量(系统变量)
$? 表示上一个命令的执行状态返回值
执行成功0
执行错误1-255
其中1、2、127系统已经定义了 其他的用户可以自己定义错误代码
二变量的引用
${} 其中{}可以省略 在不引起变量名称混淆的前提下{}可以省略
例如 ANIMIAL=pig
echo “there are some $ANIMINALs ”
此时就会引起变量名的混淆,就必须添加{},如果引用了一个没有赋值的变量名 则会显示空
NAME=jim
echo “my name is $NAME” 双引号弱引用可以变量替换(引用)
echo’my name is $NAME’ 单引号强引用不能用于变量替换(引用)
三 系统中变量的查看
1查看系统中所有环境变量和本地变量 set
2 查看系统中所有环境变量 printenv ,export ,env
脚本的执行
#!/bin/bash
脚本的第一行必须是指明脚本执行的解释器的路径
脚本编写完成后有两种方式执行脚本
第一种是直接使用 bash 命令的方式执行
如 bash /tmp/onebash.sh
第二种是给文件执行权限 在输入文件的路径来执行,或者是将文件的路径添加到$PATH的路径中去后,在直接执行文件名来执行!
二 条件测试类型
1 整数测试
2字符串测试
3文件测试
条件测试的表达式一般的三种形式 1 [空格expression空格]
2[[空格expression空格]]
3 test expression
1整数测试 -eq 测试两个整数是否相等,等为真,不等为假
-ne 测试两个整数是否不等,不等为真,等为假
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
2字符串测试
== 等于
!= 不等于
-n 测试字符串是否不为空,不为空为真,空为假
-z 测试字符串是否为空 空为真 不空为假
3文件测试 实例
1[ -e /etc/inittab ] 测试是否存在
2[ -r /etc/inittab ] 测试当前登录的用户是否具有读权限
3[ -w /etc/inittab ]测试当前登录的用户是否具有写权限
4[ -x /etc/inittab ]测试当前登录的用户具有执行权限
5[ -f /etc/inittab ]测试该文件是否是普通文件
6[ -d /etc/inittab ]测试该文件是否是目录
三命令间的逻辑判断
&& 与 || 或
&& 操作是 第一个为真时 第二个一定会执行
第一个为假时 第二个一定不执行
|| 操作时 第一个为假时 第二个一定会执行
第一个为真是 第二个一定不会执行
注意:&& 或者|| 都是取的命令执行后的返回值进行判断 而不是命令的执行结果
注意 所有变量的名称只能是 字母数字和下划线 为组合且不能以数字开头 不应该与系统中的已有的变量同名
id user1 &> /dev/null && echo the user is exist || useradd user1
如果用户不存在 则添加 并给其密码 否则显示已存在
! id user2 &> /dev/null && useradd user2 && echo "user2" | passwd --stdin user2 &> /dev/null || echo user2 is exist
2判断一个用户的uid 是否为0 如果是 显示为管理员 否则显示为普通用户
[ `id -u root` -eq 0 ] && echo the current user is admin || echo the current user is common
四算数运算
shell 中如何进行算术运算
A=3 B=5
1 let C=$A + $B
2 C=$[$A+$B]
3 C=$(($A+$B))
4 exper 算数表达式 算数表达式中各操作数和运算符之间要有表达式,且要使用反引号
C=`exper $A + $B `