2、变量


变量

变量 1

1. 用户自定义变量(增删改查) 3

1.1. 简介 3

1.2. 增: 3

1.3. 改 4

1.4. 查看 4

1.5. 删除 7

2. 环境变量 8

2.1. 用户环境变量 8

2.2. 系统自带环境变量 10

2.3. 环境变量配置文件 12

3. 位置参数变量 16

3.1. shell中预先设置好的变量,可以直接调用,不能自定义,不能删除新建或者修改,按照位置不交互传参 16

3.2. $n 16

3.3. $0 17

3.4. $# 17

3.5. $* 17

3.6. $@ 17

3.7. 实验1: 18

4. 预定义变量 19

4.1. shell中预先设置好的变量,可以直接调用,不能自定义,不能删除新建或者修改 19

4.2. $? 19

4.3. $! 20

4.4. $$ 20

4.5. $_ 20

5. 额外增加: 21

5.1. 开机自启动脚本位置 21

5.2. 要在登录或注销时执行脚本,分别需要使用 ~.bash_profile 和 ~.bash_logout 文件 21

用户自定义变量(增删改查)

简介

也叫本地变量,只在当前的shell中生效

变量的优点:提高代码效率

在shell中调用一个未赋值的变量,不会报错,返回空值

增:

变量名称=变量值

变量命名规则

变量名是区分大小写的
变量名不可以是数字开头
但是可以包含数字、字母和下划线
例子
_num=111合法
1num=111不合法
1num%=111不合法,特殊字符只有下划线合法

变量名的规范

变量名要有意义,不要拼音和abcd,尽量用英语单词
如果变量名过长们可以采用驼峰式命名或者下划线
xiaoming_age
XiaomingAge
对于常量(例如环境变量)采用全部大写表示
不要以系统中的关键字和内置变量为为变量名

name=sc echo $name name=canglaoshi echo $canglaoshi 覆盖的方式修改变量

查看

set 【选项】和env和export

set

-u如果设定该选项,调用未声明变量时会报错
例题:echo $a 输出为空 a="" echo $age 输出也是空 ,怎么办,先set -u 若调用未声明变量会报错,记住顺便写入环境变量
空就是直接回车定义他什么都没有,或者""也可以,""看得更清楚点,没定义就是还没定义他是空还是什么值,set -u应该是持续监控,怕自己区分不出来就先set -u,set -u相当于持续监控,然后再echo变量,整个当前的bash环境就都可以生效了,但是切换了bash环境就还得set -u才行

2、变量

2、变量

-x如果设定此选项,在命令执行之前,会把命令先输出一次(没啥用吧)

只输入set 查看系统中所有的环境变量(env(enviroment)也可以查看,但是查不到自定义变量)

set和env查变量

2、变量

env中变量详解

2、变量

2、变量

export也只能查看环境变量,导出环境变量

删除

unset 变量名

若test=123 ,unset test可以删除test变量

2、变量

环境变量

用户环境变量

和用户自定义变量的区别:环境变量在子shell可以生效(任何shell环境都生效),而用户自定义变量在shell不能生效

2、变量

可以知道,我们设置export环境变量是11111,但是,我们的set的意思是进入一个子shell然后设置name=1然后退出到现在的父shell,但是现在的父shellexport依然是11111

export 变量名=变量值

export AGE="18"(或者AGE="18" export age)

实验:name=23 新建一个bash,发现无法看到name变量 export AGE="18",可以看到AGE变量(因为set新建的是当前环境下的变量,而export 定义的是环境变量)

2、变量

当打开终端时,会默认读取系统中环境变量设置的文件(/etc/profile)(当打开终端并且exoprt下写入才会生效)

2、变量

查询

set和env互补查询export导出环境变量

2、变量

删除

unset AGE

系统自带环境变量

类型

PATH环境变量

查找PATH系统命令的路径 echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
系统会在上述目录中直接查找命令,当你输入命令时想要不打绝对路径,你可以放到上述文件中,或者添加文件到上述目录中
实验


实验1将命令加入到上述目录中:vi hello.sh 在里面写echo "1111111" ,保存,然后cp hello.sh /bin ,直接hello.sh(可以自动补全)


实验2追加一个目录到PATH中mkdir sh vim hello.sh PATH="$PATH":/root/sh echo $PATH可以查到PATH中多了目录/root/sh

PS1环境变量

查询:echo $PS1

2、变量

分别代表当前用户名 主机名 登陆目录的最后一个目录 普通用户还是超级用户
选项
H显示完整主机名
w显示完整目录
A显示时间
尝试修改:PS1='[\u@\H:\A \w]\$ '(使用单引号,不然双引号还需要转义符)
临时生效,写入到/etc/bashrc

LANG语系变量

echo $LANG 可以查看用户编码

2、变量

环境变量配置文件

系统变量登陆时流程图

2、变量

登录和注销

登陆时生效的环境变量配置文件

当打开终端时,会默认去读取系统中环境变量设置的文件
登陆时生效的系统配置文件(对所有用户生效)
/etc/profile(系统启动读取)作用


USER变量(默认user=root)


LOGNAME变量(用户名,根据USER而定)


MAIL变量,根据登陆的用户,定义邮箱为/var/spool/mail/用户名


PATH变量:根据登录用户的UID是否为0,判断PATH变量是否包含/sbin、/usr/sbin和/usr/local/sbin这三个系统命令目录(记)


HOSTNAME变量:更加主机名,给这个变量赋值(记)


HISTSIZE变量:定义历史命令的保存条数(记)


umask:定义umask默认权限,需要有用户登录过程时才会生效(记)


调用/etc/profile.d/*.sh文件,即调用所有/etc/profile.d目录下的所有以.sh结尾的文件,其中最常用的是lang.sh文件,而这个文件又会调用/etc/sysconfig/i18n文件,及默认语系配置文件

/etc/profile.d/*.sh


调用lang.sh文件,而这个文件又会调用/etc/sysconfig/i18n文件

/etc/bashrc(系统启动就会读取)


umask:针对没有登录过程的umask值,及切换终端或进入子shell时调用


定义PS1变量,及用户修改提示符


PATH变量:追加没有登录时生效的变量追加值


调用没有登陆时的/etc/profile.d*.sh文件

登录时生效的家目录配置文件(对单个用户生效)
~/.bashrc


定义了别名(记)


调用/etc/bashrc


开机自动运行脚本

~/.bash_profile(用户登录后读取)


调用了/.bashrc文件


在PATH变量后面加入了":$HOME/bin"这个目录,也就是说,如果我们家目录中建立了bin目录,然后把自己的脚本放入~/bin目录,可以直接执行脚本(用自动补全直接看到)

2、变量

注销时生效的环境变量配置文件

./bash_logout

其他配置文件

~/bash_history 历史命令保存文件

登录信息

/etc/issue本地终端欢迎信息

vi /etc/issue

2、变量

在本地终端可以看到欢迎信息,登陆之前可以增加终端显示

2、变量

2、变量

/etc/issue.net远程登陆欢迎信息

在生效之前先vi /etc/ssh/sshd_config,找到Banner none取消注释,并改为Banner /etc/issue.net

/etc/motd

登陆后显示的欢迎信息和警告信息

定义Bash快捷键

stty -a查询所有快捷键

stty 关键字 快捷键

stty intr ^p(不建议改,原先的ctrl+c就很好)

位置参数变量

shell中预先设置好的变量,可以直接调用,不能自定义,不能删除新建或者修改,按照位置不交互传参

$n

未知变量,进行不交互传参,n为数字,$1-$9代表第一到第九个传递的参数 (默认最大9个),十以上的参数需要用大括号包含,如${10}

实验:

2、变量

2、变量

原因:只能识别$1-$9,所以$10先识别$1再把字符“0”打出来,如果非要表示$10 在脚本里写 echo ${10}表示10是一个整体

$0

代表执行脚本命令本身,保存当前脚本路径

$#

代表命令行中所有参数的个数

$*

代表返回命令行中所有参数,$*把所有参数(空格隔开的参数)看成一个整体

$@

返回命令行中所有参数,$*把每个参数(空格隔开的参数)区分对待

实验1:

vi para.sh

echo " \$* is $* "

echo " \$@ is $@"

echo " \$# is $#"

2、变量

结果:

2、变量

实验2:进一步区分 $* 和 $@

循环三次,依次打印第123个数

vi for.sh

2、变量

结果

2、变量

由此可知,在循环中$* 将变量看作一个整体,而$@是将每个参数依次输出

预定义变量

shell中预先设置好的变量,可以直接调用,不能自定义,不能删除新建或者修改

$?

保存上一条命令执行的状态码

$!

后台运行最后一个进程的PID

2、变量

$$

显示当前进程的进程号(PID)

2、变量

$_

保存上一条命令执行的参数(相当于ESC+".")

2、变量

额外增加:

开机自启动脚本位置

/etc/rc.d/rc.local(和/etc/rc.local是同一个文件,软链) centos7记着增加执行权限

开机自动执行脚本~/bash.profile

要在登录或注销时执行脚本,分别需要使用 ~.bash_profile 和 ~.bash_logout 文件

发布者:LJH,转发请注明出处:https://www.ljh.cool/35154.html

(0)
上一篇 2023年4月5日 下午10:25
下一篇 2023年4月5日 下午10:40

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注