Shell变量

一)全局环境变量

全局变量对于定义它的shell和其子shell都是可见的,但如果生成它的shell被终止,全局变量也就消失了。另外全局变量会被子shell的同名变量覆盖。

#定义一个全局变量
export a="I want break free"
#或者
b="Sunday Morning"
export b
#删除一个全局变量
unset a

二)局部环境变量

局部环境变量只能在定义它们的进程中可见。

#注意变量名、等号、和值之间是没有空格的
c="Live Forever"
unset c

区别全局环境变量和局部环境变量其实我们只需要记住:全局环境变量作用范围多了个字shell而已。

另外关于脚本中的变量,按局部变量方式定义的在整个其范围是整个脚本文件,包括你在方法中定义的变量。要产生一个"块级作用域"的变量需要在变量定义时加上local

local d="Lucy in the sky"

三)变量的持久化

Linux下所有用户要使用的环境变量:

方案一:将变量放入/etc/profile当中--------致命缺陷:如果升级Linux系统/etc/profile文件会被更新,设置的变量不复存在。

方案二:在/etc/profile.d目录中创建一个以.sh结尾的文件,写入变量。推荐此方法。

个人用户要使用的环境变量:

放入:~/.bashrc文件

四)数组变量

#定义
array=(one tow three four)
#使用
echo ${array[]}
#three
echo ${array[*]}
#one tow three four
#删除
unset array[]
unset array[*]

五)特殊变量

1)位置参数变量

$0--------------------------------可获取当前脚本文件名,如果执行脚本时包含路径,得到的值时路径

$n---------------------------------n为数字,当n超过9时必须采用${10}形式。获取执行脚本的第n个参数

$#--------------------------------当前执行的Shell所接参数个数

$*---------------------------------获取当前脚本的所有参数,交双引号时相当于"$1 $2 $3"

$@-------------------------------不加引号时功能和不加引号的$*一样,加引号时等同于 "$1" "$2" "$3"

2)进程中的特殊状态变量

$?--------------------------------可获取上个指令执行后的返回值

$$--------------------------------执行shell脚本的进程号

六)变量的处理

1.系统内置命令

1)echo:在屏幕上输出变量  命令格式 echo args  其中arges可以是变量和字符串组合

2)eval:

命令格式:eval args

功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令。

3)exec:

命令格式: exec 命令参数

功能:在不创建新的子进程前提下,转去执行指定的命令,指定命令执行完毕后,终结该进程。

(exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境)

4)read:

命令格式: read  [参数] [变量名](该变量不能为特殊变量)
功能:从标准输入读取字符串等信息,传给shell内部定义的变量。

read -t  -p 'Pls input the num: ' num

5)shilft:

命令格式:shilft—Shilft positional parameters

功能:在程序中每使用一次shilft语句,都会使所有位置参数向左移动一个位置,最左边的变量被删除。

6)exit:

退出shell,可选定一个数字作为返回值。

2.处理变量内容

Shell脚本笔记(二)Shell变量的更多相关文章

  1. Shell脚本 (二) 变量与运算符

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 四.Shell 中的变量 1.系统变量 1.1 常用系统变量 $HOME. $PWD. $SHELL . ...

  2. 鸟书shell 学习笔记(二) shell中正則表達式相关

    通配符与正則表達式的差别 通配符是bash原生支持的语法,正則表達式是处理字符串的一种表示方式, 正則表達式须要支持的工具支持才干够 语系设置 : export LANG=C grep alias 设 ...

  3. shell脚本(二)

              shell脚本(二)——变量 一.定义:用来存放各种数据,编程语言组成部分 变量的命名规则: 变量名由数字 字母下划线组成 必须以字母或者下划线开头 不能使用shell里面的关键词 ...

  4. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  5. shell脚本实现监控shell脚本的执行流程及变量的值

    这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...

  6. shell脚本中特定符合变量的含义

    shell脚本中特定符合变量的含义: $#   传递到脚本的参数个数 $*    以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$    脚本运行的当前进程PID号 ...

  7. Linux shell脚本笔记

    shell 命令解释器 是用来解释用户对系统的操作 使用 cat /etc/shells 可以查看 系统安装的shell Linux 启动过程: BIOS -> MBR -> BootLo ...

  8. Shell学习笔记之shell脚本和python脚本实现批量ping IP测试

    0x00 将IP列表放到txt文件内 先建一个存放ip列表的txt文件: [root@yysslopenvpn01 ~]# cat hostip.txt 192.168.130.1 192.168.1 ...

  9. shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

    shell脚本?在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包 ...

  10. 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本

    #!/bin/bash # 备份 MySQL 的 shell 脚本(mysqldump版本) # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbn ...

随机推荐

  1. CF508E

    贪心题是很有趣的... 首先,本题为括号匹配问题,那么可以考虑进行栈模拟 然后,我们思考一下如何匹配:虽然题目中仅对右括号的位置提出了区域性要求,但可以发现,对能匹配上的栈顶括号立刻进行匹配一定是一种 ...

  2. Python列表去重复元素

    比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2 还有一种据说速度更快的,没测试过两者的速度 ...

  3. Linux系统编程目录

    进程环境 进程控制 1. fork.vfork.clone 2. 回收子进程 3. exec函数族 进程关系 1. 进程组 2. 会话 信号 1. 函数函数sigaction.signal 2.僵尸进 ...

  4. unable to access android sdk add-on list(转)

    造成这个问题的原因可能有多种,下面两种方法,我亲自测试后可用,如果都不行,请在评论里告诉我,我会尽快帮你分析解决.左侧的文章分类中,Android Studio编译构建错误记录了我开发中遇到的所有编译 ...

  5. CentOS7中Docker-ce的卸载和安装

    一.查看是否已安装了Docker软件包: #查看是否已经安装的Docker软件包sudo yum list installed | grep docker 二.如果已安装不想要的docker/dock ...

  6. 【Android】Bitmap加载图片错误 java.lang.OutOfMemoryError: bitmap size exceeds VM budget

    今天测试程序的时候出现下面的错误日志信息,程序当场挂掉 07-09 14:11:25.434: W/System.err(4890): java.lang.OutOfMemoryError: bitm ...

  7. device not found解决方案

    今天在使用cordova tools进行真机调试的,报了一个错:device not found; 字面意思就是没有发现设备,这时候可以首先尝试重启adb服务 C:\Users\username\Ap ...

  8. sparkStreaming运行yarn,提交任务报错

    op.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302) ...

  9. flink的集群的HA高可用

    对于一个企业级的应用,稳定性是首要要考虑的问题,然后才是性能,因此 HA 机制是必不可少的: 和 Hadoop 一代一样,从架构中我们可以很明显的发现 JobManager 有明显的单点问题(SPOF ...

  10. sql取逗号前后数据与批量修改某一字段某一值

    sql取逗号后的值 SELECT SUBSTRING_INDEX(字段,) FROM 表名 sql取逗号前的值 SELECT SUBSTRING_INDEX(字段,) FROM 表名 批量修改 UPD ...