首页 > 系统服务 > 详细

Shell之变量

时间:2019-10-01 15:53:40      阅读:130      评论:0      收藏:0      [点我收藏+]

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

技术分享图片

EXPORT

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

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

e.g. export name="Zak"

技术分享图片

READ

相当于python中input()

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

技术分享图片

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 ...)

    技术分享图片

  • 方法二

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

    技术分享图片

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

    echo ${array_name[index]}

    技术分享图片

  • 读取所有元素

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

    技术分享图片

获取数组长度

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

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

技术分享图片

变量内容的删除和替换

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

Shell之变量

原文:https://www.cnblogs.com/zakzhu/p/11615422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!