Shell之变量

Shell之变量

😄 Written by Zak Zhu

学习python风格, 优雅规范书写shell代码

参考

变量命名规则

  1. 命名只能使用英文, 数字和下划线, 首个字符不能以数字开头
  2. 中间不能有空格
  3. 不能使用标点符号
  4. 不能使用Bash里的关键字(可用help命令查看保留关键字)

变量语法规范

  • var=VALUE # shell中变量赋值等号两边没有空格

  • ${VARIABLE} # 调用变量的值

  • $(COMMAND) # 调用用命令执行的结果

  • var="string" # str数据类型建议使用双引号括起来

    $ , ` , \ , ! , 除此之外, 双引号可以去掉所有字符的特殊含义

四种变量类型

  1. Local Variable
  2. Env Variable
  3. Global Env Variable
  4. User Env Variable

系统变量

env			# 查看环境变量
set			# 查看所有变量
系统变量 注释
HOSTNAME HOSTNAME="mac"
PS1 [[\e[31;49m]\u[\e[0m]@[\e[36;49m]\H[\e[0m] [\e[33;49m]\w[\e[0m] \t]\n$
HISTSIZE default 1000
MAIL MAIL="/var/spool/mail/root"
PATH PATH="/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/root/bin"
LANG LANG="en_US.UTF-8"
RANDOM a random number (0~32767)
HOSTTYPE HOSTTYPE="x86_64"
MACHTYPE MACHTYPE="x86_64-redhat-linux-gnu"

特殊变量

变量 注释
$0 返回当前脚本的文件名
$n 返回传递给脚本的参数. n是一个数字, 表示第几个参数
$# 返回传递给脚本或函数的参数个数
$* 返回传递给脚本的所有参数, 数据类型: 字符串
$@ 返回传递给脚本的所有参数, 数据类型: 数组
$? 返回脚本或命令运行的退出状态
$$ 返回脚本运行的当前进程号

变量的使用

UNSET

在当前shell中取消某变量

e.g. unset name

1

EXPORT

子程序会继承父程序的环境变量, 子程序不会继承父程序的自定义变量

export: 自定义变量转成环境变量

e.g. export name="Zak"

2

READ

相当于python中input()

e.g. read -p "please input your name: " myname

3

DECLARE

宣告变量的数据类型

变量的数据类型默认为字符串

Using + instead of - turns off the given attribute.

declare [-aixr] VARIABLE
Options:
	-a 		# array
	-i		# integer
	-x		# to make VARIABLE export ("+x": to cancle )
	-r 		# to make VARIABLE readonly
	-p 		# display the attributes and the value of each VARIABLE

ARRAY

下面仅简单介绍BASH中数组的基础用法, 复杂的使用可以阅读本文参考中的文章, 不过我会选择用更为灵活的python来写_

如何定义数组
  • 方法一

    array_name=(value1 value2 value3 ...)
    

    4

  • 方法二

    array_name[0]=value1
    array_name[1]=value2
    array_name[2]=value3
    ...
    

    5

读取数组元素
  • 读取一个元素

    echo ${array_name[index]}
    

    6

  • 读取所有元素

    echo ${array_name[*]}
    或者
    echo ${array_name[@]}
    

    7

获取数组长度

获取数组长度的方法与获取字符串长度的方法相同

echo ${#array_name[*]}
或者
echo ${#array_name[@]}

8

变量内容的删除和替换

用法 说明
${变量#关键词} 若变量内容从头开始的数据符合关键词, 则将符合的最短数据删除
${变量##关键词} 若变量内容从头开始的数据符合关键词, 则将符合的最长数据删除
${变量%关键词} 若变量内容从尾向前的数据符合关键词, 则将符合的最短数据删除
${变量%%关键词} 若变量内容从尾向前的数据符合关键词, 则将符合的最长数据删除
${变量/旧字符串/新字符串} 若变量内容符合旧字符串, 则第一个旧字符串会被新字符串替换
${变量//旧字符串/新字符串} 若变量内容符合旧字符串, 则全部的旧字符串会被新字符串替换
posted @ 2019-10-01 15:09  ZakZhu  阅读(178)  评论(0编辑  收藏  举报