shell_变量及读取
变量分类
局部变量:只在程序执行过程中起作用,执行完后变量回收
环境变量:变量一直存在
#### 定义变量
1 | variable=hello #如果变量中没有空格,可以不用引号 |
定义变量时,赋值号(等号)左右都不能存在空格
变量的调用
变量前面加$
,同时变量本身加{}
1 | echo ${name} #当然了,大部分时候这个括号是可以省略的,只要保证后面不紧挨着其它字符 |
修改变量的值
只需重新赋值就行,而不能加 $
号,只有调用变量时才能使用 $
1 | url="www.baidu.com" |
将命令的结果赋值给变量
1 | variable=`command` |
这两种方式都可以
只读变量
不能被修改/删除
1 | readonly variable="www.baidu.com" |
删除变量
只读变量不能被删除
1 | unset variable |
系统预置变量
1 | {0} 当前程序 |
终端读取变量
实现一个交互的作用
1 | read variable |
例如:取消挂载指定磁盘
1 | !/bin/bash |
#### 给终端输入数据
1 | echo "" |
如果使用的是zsh,那么还可以使用 print
1 | print "" |
终端自动写入数据
使用到了spawn
和expect
,其中expect是一个软件套件,而spawn是shell自带的。Except主要进行自动化的交互,Except能够模拟用户的输入,也可以读取标准输出,适合需要用户输入的场景。
安装expect:
1 | pacman -S expect |
Expect中最关键的四个命令是 send,expect,spawn,interact
。
1 | send:用于向进程发送字符串。send命令接收一个字符串参数,并将该参数发送到进程。 |
shell脚本第一句话为:
1 | !/usr/bin/expect |
比如实现 一个自动填充ssh连接时的密码输入:
1 | !/usr/bin/expect |
\r
用来实现一个回车的作用
expect语法:
1 | expect "pattern" {send "action"} |
1 | expect { |