文章目录
二十八、Linux下shell脚本中的变量
28.1 变量的介绍
1)变量的定义
- 变量是计算机内存的单元(即变量就是内存中一片区域的地址),其中存放的值可以改变。当 Shell 脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。
2)变量存在的意义
- 命令无法操作一直变化的目标
- 用一串固定的字符来表示不固定的目标可以解决此问题
28.2 shell中变量定义方式
28.2.1 环境级别
- 只对当前环境生效,当环境关闭后变量就失效
export a=1
- 实践
28.2.2 用户级别
- 只对某个指定用户生效,其他的用户不生效
vim ~/.bash_profile
修改配置文件- 改完配置文件执行source生效
- 实践
28.2.3 系统级别
- 对整个系统生效,本系统中所有的用户也生效
vim /etc/profile
修改配置文件- 执行source生效
- 实践
28.3 变量名称
- 对于变量的名称不能以数字开头
- 建议变量名称短时全用大写字符,名称长时用_区分子类
- 例如:WEOOPP、WEOOPP_Linux
28.4 变量的用法
28.4.1 变量的转译
\
转译单个字符“ ”
软引用,批量转译特殊字符,但是不能转译 / ` $ !' '
强引用,批量转译所有的特殊字符- 实践
28.4.2 变量的声明
- 声明变量
{ }
- 实践
28.4.3 变量的数组
-
a=(1 2 3 4 5 )
定义一个数组 -
echo ${a[0]}
输出数组的第一个字符 -
echo ${a[-1]}
输出数组的倒数第一个字符 -
echo ${a[*]}
输出数组的所有字符,所有的字符是一个整体 -
echo ${a[@]}
输出数组的所有字符,每个字符都是单个的 -
实践
-
数组的定义
-
@ 和 *
的比较
-
练习:建立userfile文件中的所有用户
28.5 shell中设定别名
28.5.1 临时设定
alias xie=‘vim’
临时设定一个别名- 实践
28.5.2 用户设定
- 指定用户生效别名
vim ~/.bashrc
修改配置文件- sourc生效
- 实践
28.5.3 系统设定
- 对整个系统生效。系统中的用户也都生效
vim /etc/bashrc
修改系统的配置文件- sourc生效
- 实践
28.5.4 别名删除
unalias
删除命令
28.6 shell中的用户变量
28.6.1 用户变量介绍
- 环境变量(environment variables):一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。默认情况下,执行命令时需要用命令的绝对路径或者./去执行。如果把命令放到设置了环境变量的目录中,则该命令可以直接用命令的名称去调用,而不需要加路径。
- 用户变量的查看
echo $PATH
28.6.2 用户设定
- 只能在指定用户中使用
vim ~/.bash_profile
修改配置文件export PATH=$PATH:/weoopp
设定过程中不能出现错误- source 加载
- 实践
28.6.3 系统设定
- 当前系统以及当前系统用户都可以使用
vim /etc/profile
修改配置文件export PATH=$PATH:/weoopp
设定过程中不能出现错误- source 加载
- 实践
28.7 利用命令的执行结果设定变量
28.7.1 直接利用命令执行结果
28.7.2 脚本中的传参
28.7.2.1 非交互式传参
- 将脚本之外的参数传递到脚本内部,如执行create_user.sh userfile passfile时,是将userfile和passfile文件中的内容传递到脚本之中去。
- 结果分析
$0 is /mnt/test.sh
#脚本本身
$1 is text
#脚本后所输入的第一串字符
$2 is linux
#脚本后所输入的第二串字符
$3 is redhat
#脚本后所输入的第三串字符
$* is weiwei linux redhat
#脚本后所输入的所有字符"weiwei linux redhat"
$@ is weiwei linux redhat
#脚本后所输入的所有字符’weiwei’ ‘linux’ ‘redhat’
$# is 3
#脚本后所输入的字符串个数 - 脚本
- 传参
- 练习
28.7.2.2 交互式传参
read
普通的变量赋值read -p “ input”
含有输入提示的变量赋值read -s
输入时隐藏输入的变量赋值- 演示
28.8 脚本函数
函数通俗理解:将脚本的程序模块写成一个字符串,然后调用该字符串就可以使用该模块。
函数模板
函数名()
{
函数内容
}
函数调用
函数名 # 直接使用函数名就可以调用函数