1、变量的定义

变量本质上就是一片内存区域的地址即寻址符号的别名,当我们运行shell脚本时命令无法操作一直变化的目标,所以需要引入变量来解决此问题,即用一串固定的字符来表示不固定的目标。

2、shell脚本中变量的定义方法

1、环境级别

只在当前在环境生效,关闭后变量失效
在当前shell环境中定义变量a的值为2时,使用echo $a可以看到变量的值,编写脚本test.sh在脚本中写入echo $a,运行该脚本显示结果为空,这是因为在当前shell环境中定义的变量是环境级别的变量,即只针对当前shell环境生效且在环境关闭后变量失效,脚本运行时是在当前shell中再开了一个shell环境(#!/bin/bash指定的环境),在子shell环境中没有变量a的定义,所以运行脚本显示结果为空

在这里插入图片描述

2、用户级别

编辑 ~/.bash_profile文件,在其中添加变量a的声明语句export a=1,source重新读取该文件使设定生效,给当前shell中的所有子程序环境传递变量值,此时运行test.sh脚本可以看到变量a的值,但当切换到westos用户中,再次运行test.sh脚本显示结果为空,这是因为编辑 ~/.bash_profile文件声明的变量是用户级别的变量,当切换到另一用户时变量失效

vim ~/.bash_profile

source .bash_profile	#配置立即生效
export a=2

在这里插入图片描述在这里插入图片描述

3、系统级别

编辑/etc/profile文件来设定对于所有用户的所有环境都生效的系统级别的变量,但此文件内容较多,出于稳定性考虑不进行改动

vim /etc/profile
export a=2

我们一般选择在/etc/profile.d/目录下新建脚本文件写入变量a的声明语句export a=2来设定用户级别的变量,此时切换到westos用户中运行test.sh脚本可以看到变量a的值

vim /etc/profile.d/westos.sh

source /etc/profile.d/westos.sh
export a=2

在这里插入图片描述
变量名称"字符" “_” “数字”,不能用数字开头

推荐使用

变量名称短全用大写字符
变量名称长用_区分子类
WESTOS
Westos_Linux
westoS_Linux

3、变量的申明

1、转译

\    #转译单个字符
""    #弱引用,批量转译个数字符 不能转译"\" "`" "$" "!"
''    #强引用

2、声明

a=1			#在shell中直接定义a的值为1
echo $ab	#(默认会寻找ab这个整体的变量的值)
echo ${a}b	#b这样才能声明a是变量

在这里插入图片描述

3、变量的数组

a=(1 2 3 4 5)
a$[a[@]	:起始元素的id:元素个数]
echo ${a[0]}
echo ${a[-1]}
echo ${a[*]}
echo ${a[@]}
echo ${a[@]:0:3}
echo ${#a[@]}

unset a[n]	#删除数组中的第n个元素
unset a		#删除a这个数组

在这里插入图片描述

4、Linux中命令的别名设定

alias xie='vim'				临时设定

vim ~/.bashrc
alias xie='vim'				只针对当前用户生效

vim /etc/bashrc
alias xie='vim'				针对系统所有用户生效

unalias xie					删除当前环境中的alias

5、利用命令的执行结果设定变量

1)直接利用命令执行结果
$()|``		##优先执行
 
TEST=`hostname` TEST=$(hostname)
 
2)脚本中的传参
非交互模式:
$0 is /mnt/test.sh		##脚本本身
$1 is westos			##脚本后所输入的第一串字符
$2 is linux
$3 is redhat
$* is westos linux redhat	##脚本后所输入的所有字符"westos linux redhat" 整体
$@ is westos linux redhat	##脚本后所输入的所有字符'westos' 'linux' 'redhat'单个单个出现
$# is 3				##脚本后所输入的字符串个数
 
交互模式传参:
read  WESTOS			##对westos赋值
read -p "please input word:"	##输出提示语
-s				##隐藏输入内容

6、脚本函数

定义:
程序的别名
 
设定方式:
WORD()
{
	action1
	action2
}
WORD 在脚本中就代表action1 action2这两个动作
Logo

更多推荐