Shell之变量

目录

  • Shell之变量
    • 参考
    • 变量命名规则
    • 变量语法规范
    • 四种变量类型
    • 系统变量
    • 特殊变量
    • 变量的使用
    • 变量内容的删除和替换

Shell之变量

Written by Zak Zhu

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

参考

  • 鸟哥私房菜
  • 菜鸟教程(http://www.runoob.com/linux/linux-shell-variable.html)
  • RHCE培训
  • Joke Shi/Linux shell之数组(https://www.cnblogs.com/Joke-Shi/p/5705856.html)
  • 9.4.2 向数组追加元素(http://book.2cto.com/201209/3572.html)
  • Shell数组: Shell数组定义以及获取数组元素(http://c.biancheng.net/view/810.html)

变量命名规则

  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

Shell之变量_第1张图片

EXPORT

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

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

e.g. export name="Zak"

Shell之变量_第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
    ...

    Shell之变量_第3张图片

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

    echo ${array_name[index]}

    Shell之变量_第4张图片

  • 读取所有元素

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

    Shell之变量_第5张图片

获取数组长度

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

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

Shell之变量_第6张图片

变量内容的删除和替换

用法 说明
${变量#关键词} 若变量内容从头开始的数据符合关键词, 则将符合的最短数据删除
${变量##关键词} 若变量内容从头开始的数据符合关键词, 则将符合的最长数据删除
${变量%关键词} 若变量内容从尾向前的数据符合关键词, 则将符合的最短数据删除
${变量%%关键词} 若变量内容从尾向前的数据符合关键词, 则将符合的最长数据删除
${变量/旧字符串/新字符串} 若变量内容符合旧字符串, 则第一个旧字符串会被新字符串替换
${变量//旧字符串/新字符串} 若变量内容符合旧字符串, 则全部的旧字符串会被新字符串替换

你可能感兴趣的:(Shell之变量)