Linux —— shell脚本中的变量

1. 变量的定义

1.1 定义本身

变量就是内存中的一片区域的地址

1.2 变量存在的意义

命令无法操纵一直变化的目标,用一串固定的字符表示不固定的目标来解决此问题

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

2.1 环境级别(仅在当前环境下生效)

export a=1   ## 共享
特点:在环境关闭后,变量失效。

2.2 用户级别(仅在当前用户下生效)

## 改变用户家目录下的 .bash_profile
vim ~/.bash_profile
export a=1

2.3 系统级别

vim /etc/profile
export a=2
## 此时在系统中设定变量值为2,westos用户下设定变量值为1,在westos用户下输出变量值为1
## 这是因为先读全局文件,后读用户自身文件,因为会发生指向的变更,进行地址会重定向
vim /etc/profile.d/dsd.sh
export b=3
## 文件编写完成之后进行source,使其生效

从实验结果可以看出,哪个变量值最后被读取,即哪个生效,这是因为会发生指向的变更,进行地址会重定向

2.4 变量名称

"字符" 、"_"、"数字"

注意:不能用数字开头

建议:

变量名称短全用大写字符

变量名称长用"_"区分子类

3. 变量的转译

3.1 转译

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

3.2 声明

{}   ## 声明
a=1
echo $ab
echo ${a}b

3.3 变量的数组

a=(1 2 3 4 5)
echo $a        ## 默认下标为0
echo ${a[0]}   ## 输出数组第一个字符
echo ${a[1]}   ## 输出数组第二个字符
echo ${a[*]}   ## 输出数组所有字符
echo ${a[@]}   ## 输出数组所有字符
###输出数组所有字符的*和@的区别###
a=(1 2 3)
a[*] = "1 2 3"
a[@] = "1" "2" "3"

4. Linux中命令的别名设定

alias xie='vim'   ## 临时设定/环境级别设定

vim ~/.bashrc
alias xie='vim'   ## 用户级别,只针对于用户生效
source ~/.bashrc

vim /etc/bashrc
alias xie='vim'   ## 系统级别,针对系统所有用户生效
source /etc/bashrc

unalias xie    ## 删除当下环境中的alias

5. 用户环境变量的更改

环境变量:用户在操作系统时使用到的命令搜索路径

5.1 用户级别

vim .bash_profile
###
export PATH=$PATH:/mnt
###
source .bash_profile
westos.sh
echo $PATH    ## 输出PATH环境内容

 5.2 系统级别

vim /etc/profile
###
export PATH=$PATH:/mnt
###
source /etc/profile
westos.sh
su - westos   ## 切换用户
westos.sh
echo $PATH    ## 输出PATH环境内容

6. 利用命令的执行结果设定变量

6.1 直接利用命令执行结果 

$()  ## 优先执行,shell中

 ``   ## 优先执行,所有均可

6.2  脚本中的传参

  • 非交互模式
#!/bin/bash
echo '$0' is  $0   ## 脚本本身
echo '$1' is  $1   ## 脚本后所输入的第一串字符
echo '$2' is  $2
echo '$3' is  $3
echo '$*' is  $*   ## 脚本后所输入的所有字符"westos linux redhat"
echo '$@' is  $@   ## 脚本后所输入的所有字符'westos' 'linux' 'redhat'
echo '$#' is  $#   ## 脚本后所输入的字符串个数

  • 交互模式传参
read DSD   ## 对DSD赋值
read -p "Please input word: " DSD   ## 加-p表示输出提示语
read -p "Please input word: " -s DSD   ## 加-s表示静默输入,隐藏输入内容

7. 脚本函数

函数:程序的别名

## 设定方式
WORD()
{
    action1
    action2
}

WORD在脚本中就代表action1和action2两个动作

8. 脚本练习

create_user.sh userfile passfile

userfile中的用户会被全部建立

passfile中的密码会被全部设定

#!/bin/bash
[ -z $1 ] && {
	echo "未指定用户文件"
	exit
}
[ -z $2 ] && {
	echo "未指定密码文件"
	exit
}

N=`awk 'BEGIN{n=0}{n++}END{print n}' userfile`
M=`awk 'BEGIN{m=0}{m++}END{print m}' passfile`
[ "$N" != "$M" ] && {
	echo "用户与密码行数不匹配"
	exit	
}

for I in `seq 1 $N`
do
# 创建变量UserName和PassName
	UserName=`sed -n ${I}P userfile`
	PassName=`sed -n ${I}P passfile`
# 判断系统中是否已经存在该用户,如果存在,报错,反之则进行创建
	if id $UserName > /dev/null 2>&1
	then 
		echo $UserName 已经存在
	else
		useradd $UserName
		echo $PassName | passwd --stdin $UserName
		echo $UserName 创建成功
	fi 
done

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值