shell 变量与条件测试

变量

一、shell

1、shell:命令解释器,一种应用程序。

2、shell 多种执行方式:

准备测试脚本:

执行方法 1:bash file1

执行方法 2:sh file1

执行方法 3:. file1

执行方法 4:source file1

3、多种执行方式的区别:

方法 1 和 2 是子shell ;方法 3 和 4 是本shell

(1、2 是计算机新打开一个 shell 去执行;3、4 是在当前的 shell 下执行)

二、变量

变量:用一个固定的字符串去表示不固定的内容,便于修改。

1、自定义变量

变量名和变量值由用户自己定义。

(1) 定义变量:

变量名=变量值 (注意:变量名、= 、变量值之间没有空格)

例:name="bean"

(2) 变量调用:

提取变量中的内容时,需要在变量名前加入 $,通过 echo 命令输出变量的值

变量定义规则:

① 变量名不能以数字开头

② 等号左右两侧不能有空格

③ 变量的值如果用空格,需要用引号包含

④ 不要使用 bash 里的关键字

(3) 重复定义变量:

重复定义的变量会进行叠加覆盖

进行变量叠加时,也可以使用 ${变量名} 的格式:

(4) 变量查询:

可以通过 echo 查了看已经设定的变量的值。

如果不知道变量,可以通过 set 查询计算机所有变量。

set | grep name

(5) 变量删除:

unset 变量名

例:unset aa

(6) 交互式定义变量:

 read 从键盘读入变量值

例:编写一个测试 ip 连通性的 bash 脚本

2、整体运算

(1) expr

语法:expr $num1 + $num2 (变量和符号之间要有空格)

+ 加 ; - 减 ; \* 乘 ( \ 转义) ; / 除 ; % 取余

(2) $(())

语法:echo $(($num1+$num2))

(3) $[]

语法:echo $[num1+num2]

(4) let

3、小数运算

需要安装计数器程序 bc

echo "scale=2 ; 6/4" | bc(scale=2:保留两位小数)

4、环境变量

自定义变量只在当前 shell 生效,在子 shell 中无效。若需要 本shell 和 子shell 都能使用,则要声明环境变量。(仅限于当前shell 和 子shell)

未声明环境变量时:

声明环境变量后:

5、位置变量和预定义变量

(1) 位置变量语法:$1、$2 … $9

编写时无定义,使用者需要把参数跟在程序后面(类似占位符)

例:vim ping.sh

(2) 预定义变量

$0:输出脚本名 / 程序名

$* 所有的参数

$# 参数的个数

$$ 程序的 PID

条件测试

1、数值比较 [ 整数 操作符 整数 ]

(1) 操作符:

-gt  大于         

-lt  小于

-eq  等于

-ge  大于等于

-le  小于等于

-ne  不等于

(2) 测试语法:

格式1:test 条件表达式

格式2:[ ] 条件表达式

注意:使用 [ ] 条件表达式时前后需要加空格,例如 [  $num  -eq  10  ],

因为空格在 shell 中用作分隔符,将命令、参数和操作符分开,如果没有空格会导致解析错误。

● 示例:测试输入的字符串是否符合长度

aaa=12345678 ; test ${#aaa} -ge 7 ; echo $?

#aaa:#+变量名表示输出字符串长度

$?:表示上一个程序的返回值,0 表示成功,非0表示失败

(3) if 语法结构

● 示例:编写脚本检查用户输入的密码,是否满足长度要求

vim pass.sh

2、文件测试 [ 操作符 文件或目录 ]

● 示例:用户输入目录的路径,如果存在提示已存在,不存在提示目录需创建

vim path.sh

test -d $dir1:-d 当 pathname 存在并且是一个目录时返回真

-wpathname:由 pathname 指定的文件或目录存在并且可写时返回真

3、字符串比较 [ "字符串"="字符串" ]

= 等于

!= 不等于 

-z:判断字符串长度为0 ; -n:判断字符串长度不为0

使用 -z 或 -n 检查长度时,没有定义的变量长度也为0

● 示例:请求用户确认,yes 表示确认,no 表示放弃

vim select.sh

4、混合条件测试 and / or

当条件测试需要多个条件同时成立时,就用到混合条件测试。

-a (&&):两个条件同时成立,为真;

-o (II):两个条件一个成立,为真

● 示例:测试用户输入的密码是否包含以下条件:

1. 长度大于等于7位

2. 包含字母大写

3. 包含字母小写

5、调试脚本

bash -n + 脚本:调试脚本中的语法错误

bash -vx + 脚本:以调试的方式执行,查询整个执行过程

6、流程控制 if

(1) 单分支结构:

(2) 多分支结构:

(3) 嵌套结构

● 示例:

if id $user &> /dev/null:只进行判断,不输出判断结果

echo $pass | passwd --stdin $user:将存储在 $pass 变量中的密码通过管道传递给 passwd 命令,并用于更改指定 $user 用户的密码。

测试结果:

7、模式匹配 case

(1) 语法:

●示例:检测用户是否确认:

(2) JumpServer 跳板机

通过 shell 编程,编写跳板程序去访问其他服务器

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值