3.4 SHELL脚本中的变量

变量的定义

  • 变量本身

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

  • 变量存在的意义

命令无法操作一直变化的目标

用一串固定的字符来表示不固定的目标可以解决此问题.

SHELL脚本中变量的定义方法

  • 环境级别
export A=1

在环境关闭后变量失效.

  • 用户级别
vim ~/.bash_profile
export A=1

##编辑完配置文件后需要刷新配置
source ~/.bash_profile
  • 系统级别
vim /etc/profile
export A=2

#或

vim /etc/profile.d/Test
export B=5

用户级别的变量定义
自定义用户脚本

变量名称

  • 变量名称可以包含的字符类型

    • 字母
    • 数字
    • 下划线
    • 但是不能使用数字开头
  • 变量命名建议

    • 变量名称短的时候全部使用大写字符
    • 变量名称较长时用_区分子类
    TEST				##名称较短
    TEST_Ifconfig		##名称较长
    

变量的转译

转译

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

示例输出

[root@Node1 ~]# echo #

[root@Node1 ~]# echo \#
#
[root@Node1 ~]# echo \####
####

##只转译了第一个#
[root@Node1 ~]# echo \# # # #
#
[root@Node1 ~]# echo \# \# \# \#
# # # #
[root@Node1 ~]# echo "# # # # #"
# # # # #
[root@Node1 ~]# echo "? ? ? ? ?"
? ? ? ? ?
[root@Node1 ~]# echo "$ $ $ $"
$ $ $ $

##体现了弱引用和强引用的区别
[root@Node1 ~]# echo "$1 $1 $1 $1"

[root@Node1 ~]# echo '$1 $1 $1 $1'
$1 $1 $1 $1

声明

A=1
echo $Ab		##会输出空值,因为系统将Ab当作了变量名
echo ${A}b		##输出1b,声明了A是变量

变量的数组

##定义一个5个元素的数组
A=(1 2 3 4 5)

##按照要求输出内容
echo ${A[0]}		##数组中的第1个元素
echo ${A[1]}		##数组中的第2个元素
echo ${A[2]}		##数组中的第3个元素
echo ${A[-1]}		##数组中的最后1个元素
echo ${A[*]}		##数组中的所有元素
echo ${A[@]}		##数组中的所有元素,与上一条含义相同

echo ${#A[@]}		##数组中元素的个数

##条件输出
${A[@]:起始元素ID:元素个数}
echo ${A[@]:0:2}	##从数组中第1个元素开始,输出2个元素
					##即输出第1个和第2个元素

输出示例

[root@Node1 ~]# A=(1 2 3 4)
[root@Node1 ~]# echo ${A[0]}
1
[root@Node1 ~]# echo ${A[1]}
2
[root@Node1 ~]# echo ${A[-1]}
4
[root@Node1 ~]# echo ${A[*]}
1 2 3 4
[root@Node1 ~]# echo ${A[@]}
1 2 3 4
[root@Node1 ~]# echo ${#A[@]}
4
[root@Node1 ~]# echo ${A[@]:2:2}
3 4

Linux中命令的别名设定

alias Cai='vim'			##临时设定vim的别名为Cai
						##退出环境后系统回收资源,临时设置失效

vim ~/.bashrc
alias Cai='vim'			##只针对当前用户起效
						##不需要刷新配置
						
vim /etc/bashrc
alias Cai='vim'			##针对系统中所有的用户起效
						##不需要刷新配置
						
##别名的删除
1. 删除bashrc中的设置内容
2.1 unalias Cai			##删除当前环境中的alias设置
2.2 当然直接exit退出终端环境也是可以的

用户环境变量的更改

环境变量

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

##设定方式
##用户级别增加mnt目录为环境变量
~/.bash_profile
export PATH=$PATH:/mnt

##系统级别增加mnt目录为环境变量
/etc/bash_profile
export PATH=$PATH:/mnt

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

直接利用命令执行结果

TIME=$(date +%H:%M:%S)
echo $TIME
09:09:55

TIME=`date +%H:%M:%S`
echo $TIME
09:09:55

两者都可以使用,区别在于后者的使用更广,在perl中也可以使用.

脚本中的传参

  1. 非交互模式

    $0		##脚本本身
    $1		##脚本后所输入的第1串字符
    $2		##脚本后所输入的第2串字符
    $3		##脚本后所输入的第3串字符
    $*		##脚本后输入的全部字符,"Test1 Test2 Test3"
    $@		##脚本后输入的全部字符,'Test1' 'Test2' 'Test3'
    $#		##脚本后输入的字符串的个数
    
    ##举例
    vim Test.sh
    
    #################################
    # Author:         NeuWings
    # Create_Time:    2021/03/09
    #################################
    #!/bin/bash
    
    echo '$0' IS $0
    echo '$1' IS $1
    echo '$2' IS $2
    echo '$3' IS $3
    echo '$#' IS $#
    echo '$*' IS $*
    echo '$@' IS $@
    
    chmod +x /mnt/Test.sh
    
    [root@Node1 mnt]# /mnt/Test.sh Test Linux File
    $0 IS /mnt/Test.sh
    $1 IS Test
    $2 IS Linux
    $3 IS File
    $# IS 3
    $* IS Test Linux File
    $@ IS Test Linux File
    

*将所有字符当作一个字符串输出

@将所有字符当作多个字符串输出

  1. 交互模式传参

    #################################
    # Author:         NeuWings
    # Create_Time:    2021/03/09
    #################################
    #!/bin/bash
    
    read -p "Please Input Word: " Test
    
    
    ##在当前环境运行此Shell脚本
    source Test.sh
    
    Please Input Word: 12345
    
    echo $Test
    12345
    ##可以看到,交互式赋值成功
    

脚本函数

TEST() {
	action1
	action2
}

则在脚本中出现的所有TEST都表示actiosn1action2两个动作.

每次引用TEST都将执行这两个动作.

同理,根据这个特性可以实现一般编程语言中的递归.

#################################
# Author:         NeuWings
# Create_Time:    2021/03/09
#################################
#!/bin/bash

MAIN() {
	read -p "Please Input Username: " USERNAME
	[ "$USERNAME" = "EXIT" -o "$USERNAME" = "exit" ] && {
		exit
	} || {
					USERCHECK $USERNAME
				}
}

USERCHECK() {
	id $1 &> /dev/null && {
		echo "$1 is exist."
		MAIN
	} || {
				CREATEUSER $1
	}
}

CREATEUSER() {
	useradd $1 &> /dev/null && {
		read -p "Please Input Password: " -s PASSWORD
		echo ""
		echo $PASSWORD | passwd --stdin $1 &> /dev/null
		echo $1 is created.
		} || {
						echo Unknown Error.
					}
	MAIN
}

MAIN

上面的脚本实现了循环创建新用户,当用户存在时提示用户存在,用户不存在时会自动建立并输入密码,输入exit时退出脚本.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值