shell基础语法:变量,变量作用域,注释,shell配置文件

参考

https://www.runoob.com/linux/linux-shell-variable.html(shell变量)

基本知识

1,Shell是弱类型的语言,

没有向C、java那样的强类型变量,都是弱类型变量。都会统一存储为字符串类型

2,语法

your_name="runoob.com"

支持3种方式
name=nick
name='nick'
mame="nick"

3,格式

变量名和等号之间不能有空格

命名只能使用英文字母,数字和下划线

4,变量使用

使用一个定义过的变量,只要在变量名前面加美元符号即可

your_name="qinjx"
echo $your_name
echo ${your_name}

注意:变量名外面的{}是可选的,加不加都行,加{}是为了帮助解释器识别变量的边界

已定义的变量,可以被重新定义

your_name="tom"
echo $your_name
your_name="alibaba"  #这里不能加$,使用变量的时候才要加$
echo $your_name

5,只读变量

#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"  #会报错

6,删除变量

注意:unset 命令不能删除只读变量, 

删除只读变量待整理

unset variable_name

变量作用域

参考:http://c.biancheng.net/view/773.html(C编程网:shell变量作用域)

运行shell时,会同时存在三种变量:

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

 局部变量

在 Shell 函数中定义的变量默认也是全局变量,它和在函数外部定义变量拥有一样的效果。

#!/bin/bash
#定义函数
function func(){
    a=99
}
#调用函数
func
#输出函数内部的变量
echo $a  #输出99

要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量

#!/bin/bash
#定义函数
function func(){
    local a=99
}
#调用函数
func
#输出函数内部的变量
echo $a  #为空

全局变量

所谓全局变量,就是指变量在当前的整个 Shell 进程中都有效。每个 Shell 进程都有自己的作用域,彼此之间互不影响。

在 Shell 中定义的变量,默认就是全局变量。

想要实际演示全局变量在不同 Shell 进程中的互不相关性,可在图形界面下同时打开两个 Shell,或使用两个终端远程连接到服务器

环境变量

1,全局变量只在当前 Shell 进程中有效,对其它 Shell 进程和子进程都无效。如果使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为“环境变量”

2,环境变量被创建时所处的 Shell 进程称为父进程,如果在父进程中再创建一个新的进程来执行 Shell 命令,那么这个新的进程被称作 Shell 子进程。

当 Shell 子进程产生时,它会继承父进程的环境变量为自己所用,所以说环境变量可从父进程传给子进程。不难理解,环境变量还可以传递给孙进程。环境变量只能向下传递而不能向上传递

3,通过exit命令可以一层一层地退出 Shell。

4,环境变量也是临时的

通过 export 导出的环境变量只对当前 Shell 进程以及所有的子进程有效,如果最顶层的父进程被关闭了,那么环境变量也就随之消失了,其它的进程也就无法使用了,所以说环境变量也是临时的。
如果想让一个变量在所有 Shell 进程中都有效,不管它们之间是否存在父子关系,
只有将变量写入 Shell 配置文件中才能达到这个目的!Shell 进程每次启动时都会执行配置文件中的代码做一些初始化工作,如果将变量放在配置文件中,那么每次启动进程都会定义这个变量。

shell配置文件

 参考:https://blog.csdn.net/xiao_dan_/article/details/107935972(CSDN:shell配置文件)

全局配置类

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

个人配置类

~/.bash_profile
~/.bashrc

profile 类

profile 类为交互式登录的shell 提供配置,用于定义环境变量或运行命令和脚本

bashrc类

bashrc类为非交互式和交互式登录的shell 提供配置,用于定义命令别名和函数或定义本地变量

配置文件生效

1 重新启动shell 进程
2 source | . 配置文件名

执行顺序

交互式登录

直接通过终端输入账号密码登录
使用 su - UserName 切换的用户

非交互式登录

su UserName
图形界面下打开的终端
执行脚本

bash 退出任务

保存在~/.bash_logout 文件中(用户),在退出登录shell 时运行。用于创建自动备份,清除临时文件

注释

注释符#

#--------------------------------------------
# 这是一个注释
# author:菜鸟教程
# site:www.runoob.com
# slogan:学的不仅是技术,更是梦想!
#--------------------------------------------

多行注释

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

#或者
:<<'
注释内容...
注释内容...
注释内容...
'
原文地址:https://www.cnblogs.com/tkzc2013/p/15349667.html