linux中bash shell的重要特性:变量

变量:内存中的某个存储单元

程序中的变量a,就是指用a命名的某个存储单元,用户对变量a进行的操作就是对该存储单元进行的操作;系统根据其类型为决定存储机制和存储空间大小,变量的地址就是内存空间中的地址。

bash shell的变量类别

  • 本地变量

只对当前shell进程有效的变量;对其它shell无效,包括当前shell的子进程。

例如:init --> xxx --> bash --> bash (pstree查看进程树)在上一个bash shell(父shell)中定义一个变量: name = A,在子shell查看name: echo &name,结果为空。

变量赋值/定义:VAR_NAME=VALUE
变量引用:${VAR_NAME} (’{}'大多数情况下可以省略)
强引用 [单引号 ‘’]:里面的变量会被替换
弱引用 [双引号 “”]:里面所有的字符都是字面常量,直接输出

name = A
echo '$name'  #输出 $name
echo "$name"  #输出 A
  • 环境变量

对当前shell进程有效及其子shell有效的变量。

功能命令
定义环境变量export VAR_NAME=VALUE
撤消环境变量unset VAR_NAME(虽然shell退出时,会回收变量,但提前撤消可节约内存空间)
只读环境变量readonly VAR_NAME
显示环境变量HOMEecho $HOME
显示所有的环境变量env
显示所有本地定义的Shell变量set
/etc/profile增加新的环境变量export path=$path:/path1:/path2:/pahtN
  • 局部变量

对shell脚本中某代码片断有效;通常用于函数中,函数调用结束,其随之消失。

定义局部变量:local VAR_NAME=VALUE

  • 位置变量

$1,$2,…, ${10} 常用于表示脚本命令中选项的位置,如: ls -l /etc/profile 其中$1表示参数[-l]的位置,第1个参数的位置。表示超过两位数的参数时,使用大括号限定起来。

  • 特殊变量

$?,表示特殊意义的变量。

参数标识符含义
$0文件本身的名字
$#参数的个数
$*所有参数列表。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@所有参数列表。如"$@“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$Shell本身的PID(ProcessID)
$!Shell最后运行的后台Process的PID
$?最后运行的命令的结束代码(返回值)

bash的配置文件

  • profile类

为交互式登录shell的用户提供配置。如:通过终端输入账号和密码登录 --login;使用su -l USERNAME 或 su - USERNAME;

  • 全局(对所有用户)生效的配置文件:
     /etc/profile
     /etc/profile.d/*.sh
  • 仅对当前用户生效的配置文件:
     ~/.bash_profile
  • 作用
     1、设定环境变量
     2、运行命令或脚本
  • bashrc类

为非交互式的用户提供配置。如执行脚本;su USERNAME;图形界面下打开的终端。

  • 全局(对所有用户)生效的配置文件:
     /etc/bashrc
  • 仅对当前用户生效的配置文件:
     ~/.bashrc
  • 作用
     1、设定本地变量
     2、定义命令别名

Notice:
如何通过编辑配置文件让修改的配置生效?
 1、退出并重新登录;
 2、让bash重读此文件; . filename 或者 source filename

交互式登录的用户配置文件读写次序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录的用户配置文件读写次序:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

越先读取,越有可能被覆盖。越后读取,越有可能是最终生效的。交互式登录的用户也会读取非交互式用户下的配置文件。非交互式登录的用户也会读取/etc/profile.d/*.sh,不是完全的泾渭分明。

  • 交互式shell和非交互式shell

交互式模式:就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
非交互式模式模式:以shell script(非交互)方式执行。
在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

  • 登录shell和非登录shell

登录shell:是需要用户名、密码登录后才能进入的shell(或者通过"–login"选项生成的shell)。
非登录shell:当然就不需要输入用户名和密码即可打开的Shell。
例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。
执行exit命令,退出一个shell(登录或非登录shell);
执行logout命令,退出登录shell(不能退出非登录shell)。

bash是 login shell 时,其进程名为”-bash“ 而不是”bash”。

[perf@host_220-188 ~]$ echo $0
-bash
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值