shell编程(六)变量再谈

一    环境变量

(1)系统变量

顾名思义: '全局'的'环境'变量,操作系统'内置'的

①  TMOUT

1)应用场景一

2)应用场景二

原因: 为了'增强'Linux系统的'安全性',需要在'用户输入'空闲一段时间后'自动断开',这个操作可以由设置TMOUT值来实现

说明: 退出前'等待超时'的秒数;防止'什么'也不做,占用'链接资源'

应用: 控制'ssh连接'在空闲时间超时,'自动断开'连接的时间,数字单位为"秒"

备注: 设置好ssh的'登录超时'时间以后,记得'退出重新登录'或重启系统,以使'配置生效'

+++++++++++++++'设置方式'+++++++++++++++

export TMOUT=900    设置'900秒内'用户无操作就'断开连接'

readonly TMOUT      将值'设置'为readonly '防止用户'更改,在shell中'无法修改'TMOUT

备注: 默认是'0',代表永'不'自动退出

ssh超时

参考博客

②  SHLV1

功能: 统计'bash实例'的个数

应用: 比较'脚本的不同执行方式'差异性,脚本中'打印'该变量与'终端对比'

③  PS4

开启'追踪时'使用的'调试提示符串',默认值是'+',需要追踪可用 'set -x' 开启

+++++++++'改变脚本调试的行径'++++++++

set -x xtrace

export PS4='+{\$LINENO:${FUNCNAME[0]}} '

效果: 能在'每一条实际执行'的命令前面'显示其行号'以及'所属的函数名'

④  PATH

特点: 系统'查找命令'的路径

脚本: 常常'只写'命令的'相对路径'

备注: linux是'多人'环境,每个人可能会在'PATH'里面加上自定义的目录或文件;为了'避免'出现'意外'情况,最好在脚本中'重新'定义'PATH'路径

⑤  LANG

Centos7 中没有 /etc/sysconfig/i18n 如何永久修改当前系统语言

⑥  IFS

特点: 输入域分隔符('input field separate'),是bash内部'字段分隔符'的环境变量,当shell'读取输入'时,用来'分隔单词'的一组字符,'绝大多数'时候默认是采用'空格'作为分隔符,有些时候遇到'制表符'、'换行符'也会进行分隔

1)IFS 是一种 'set' 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,来'拆解'读入的变量,然后'对特殊字符'进行处理,最后'重新组合'赋值给该变量

2)默认是 'space', tab, newline 

细节: 对'空格处理'有点不一样,对行首和行尾'两边的空格'不处理,并且'多个连续的空格'默认当作'一个'空格

应用场景: 有些时候在编写脚本或'执行循环'的时候,'修改IFS'可以起很大作用

注意事项: 如果'要修改'IFS,最好记得'先备份'系统IFS,再需要的地方'再还原'IFS

⑦  REPLY

说明: 与read命令强相关,默认的'内置变量'保存传入的数据

⑧    SECONDS

⑨  SHELLOPTS

 

⑩  DIRSTACK

它显示目录栈的'栈顶值',和我们常见的栈一样为'先进先出',拥有'入栈'和'出栈'两个动作

'关联'的三个命令:dirs、popd、pushd

⑪  其它  

1.  HOME

2.  SHELL-->'当前shell类型'

3.  HOSTNAME-->'主机名,同hostname命令'

4.  PPID -->'是当前进程的父进程的PID'

5.  shell带有'内置函数RANDOM'可以随机生成'随机数其范围'为:0~32767

(2)自定义环境变量

++++++++'思考'++++++++

1)如何'how'定义

2)在'哪(where)'定义,对应的'影响' -->'后续讲解'

①  三种方式

1)export JAVA_HOME='/home/kiosk/Development/JDK/jdk1.8.0_202'  -->'常见'的方式

2)JAVA_HOME='/home/kiosk/Development/JDK/jdk1.8.0_202';export JAVA_HOME -->'先'定义、'再'声明

3)declare -x JAVA_HOME='/home/kiosk/Development/JDK/jdk1.8.0_202' -->'了解即可'

备注: 声明一个变量作为脚本的'环境变量'而被'导出' -->(x=e'x'port)

二    3个命令显示变量

set高级用法

(1)set

shell中 set 指令的用法

备注: 一次可以'设置多个'参数  

①  不带参数

显示所有的变量('全局'、'局部')和'函数'  -->'不常用'

②  -o参数

功能: 显示 'bash shell' 的所有'参数配置'信息

③  -e参数

++++++++++++'set -e'++++++++++++

含义: '-e参数'表示只要shell脚本中'发生错误',即命令返回值'不等于0',则'停止执行并退出'shell

场景: set -e在shell'脚本'中'经常使用'

默认: shell脚本'碰到错误'会'报错',但会'继续执行后面'的命令

关闭: 'set +e'表示关闭

打开: 'set -e'表示打开

④  -u参数

-u参数表示shell'脚本执行'时,如果遇到'不存在的变量'会'报错'并'停止'执行

备注: 默认'不加-u参数'的情况下,shell脚本遇到'不存在'的变量不会报错,会'继续执行'

⑤  -x参数

-x 执行指令后,会'先显示'该指令及所下的参数

特点: set -x 会在'执行每一行' shell 脚本时,把'执行的内容输出来'

备注: 它可以让你'看到当前执行'的情况,里面'涉及的变量'也会被'替换成实际'的值

结合: 'PS4'和'set-x'结合

不错的参考

(2)env

特点: 只显示'全局'变量

(3)declare

特点: 除了'所有的变量'外,还有'函数'、'整数'

declare  -r   var         -->'readonly'    -->'只读'

declare  -x   var=10      -->'export'      -->'全局'  -->'字符串类型'

declare  -a   array       -->'定义一个数组'  -->'数组'

declare  -i   integer     -->'整数'         

三    变量类型

说明: '默认'情况bash'不会区分'变量类型

shell中变量有'哪些'类型: '整数'、'小数'、'字符串'(最常见的)、'数组(关联数组)'

①  整数

declare -i integer=10

②  小数

脚本中'无法定义'小数,,单bc能'计算'小数

方法'一':使用bc计算器

方法'二':使用awk

方法'三':使用expr

数组元素的'下标'由'0'开始,

③  数组

数组定义

遍历数组

declare  -a   array                           -->'定义一个数组'  -->'数组'

declare  -A   array                           -->'关联数组' -->'类似python的字典'

read     -a   array                           -->'接收一个数组变量'

array=($(ls /home)                            -->'动态定义数组'

array=(20 56 "http://c.biancheng.net/shell/") -->它并'不要求'所有数组元素的'类型'必须相同  -->'弱类型'

四     变量的加载顺序

说明:以'centos7.7'为例;核心是'看懂'脚本,进而了解'加载'顺序

(1)系统运行shell的方式

①  通过系统用户登陆后默认运行的shell

理解: 开机,启动'centos7'系统,加载'环境变量'的行为

1)全局系统级别

交互式模式

/etc/profile.d

首先:全局的加载-->'/etc/profile',根据该文件再去'加载/ect/profile.d/*.sh'

2)用户级别

其次:'用户级别'的,具体'哪个用户'登陆 -->'~/.bash_profile',根据该文件读取'~/.bashrc',然后才去找'/etc/bashrc'

②   非登陆交互式运行的shell

场景: 手动'输入bash'时的启动、'su切换用户身份'时候、'远程ssh连接'的时候

特点: 仅仅首先'加载用户级别'的环境变量配置文件(~/.bashrc) 

+++++++++++'细节对比'+++++++++++

1) ~/.bash_profile是'交互式login'方式进入bash shell运行

2) ~/.bashrc是'交互式non-login'方式进入bash shell运行

通俗点说: 就是.bash_profile文件只会在'用户登录'的时候读取一次,而'.bashrc'在每次'打开终端'进行'一次新的会话'时都会读取

③   执行脚本运行的非交互shell

④   其它方式

高级参考

参考博客1

参考博客2

五    变量的操作

①  定义

+++++++++'特殊定义'+++++++++

1)涉及'反引号``、()'命令,然后赋值变量场景

2)'函数调用'返回值

++++++++++'修饰符'++++++++++

local     --> 'function内部定义'

readonly  --> '定义一些常量,一般变量名大写'

1)只读

2)local

#!/bin/bash 

#local一般用于'局部变量'声明,多在在'函数内部'使用

fun()
{
	local var=1
}

fun

echo $var 

对比: 去掉'local修饰'看输出结果

参考博客

②  删除

unset-->取消变量,只需要变量名即可

unset var

备注: 可以'只删除'数组的一个元素

③  修改

④  查看

1)echo

+++++++++++++'核心关注两点'+++++++++++++

1)关于'颜色'

2)双引号,可以'内嵌套'变量

3)使用哪些'转义字符' -->开启'-e'选项

2)printf

理解: C遗留的,可以控制'输出格式',功能'更强大'

备注: 一般'输出报表',会使用'\t'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值