(二)Shell编程之运行方式、注释、变量

本文介绍了Shell脚本的基础知识,包括创建和运行脚本、注释、变量及其作用域。通过实例展示了如何定义和使用变量,以及如何通过环境变量实现全局访问。此外,还讨论了Shell脚本的执行方式,包括作为可执行程序和解释器参数。最后,讲解了局部、全局和环境变量的区别,并提供了在脚本中引用环境变量的示例。
摘要由CSDN通过智能技术生成

一、第一个shell脚本

打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好。

输入一些代码,第一行一般是这样:

#!/bin/bash

#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell

echo命令用于向窗口输出文本。

二、单行、多行注释

(1)单行注释

以#开头的行就是注释,会被解释器忽略。

通过每一行加一个 # 号设置多行注释,像这样:

# --------------------
# 这是一个注释
# author: 大侠
# slogan: 学的不仅是技术,更是梦想!
# --------------------

(2)多行注释

多行注释使用以下格式:

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

EOF也可以使用其他符号:

:<<'
注释内容...
注释内容...
注释内容...
'




:<<!
注释内容...
注释内容...
注释内容...
!

三、运行Shell脚本有两种方法

(1)作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

# 使脚本具有执行权限
chmod 755 ./test.sh

# 执行脚本
./test.sh

(2)作为解释器参数

这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:

/bin/sh test.sh
/bin/python test.py

四、shell变量

(1)定义变量

shell中定义变量与python语言类似,语法如下:

name=[value]

如果value没有给出,变量将被赋值为空字符串。

注意:赋值等号两边不能有空格,这几乎和所有的变成语言都不一样。

变量名的命名规则同python:

  • 英文字母,数字和下划线
  • 首字符不能是数字
  • 不能使用bash中的关键字(help命令查看保留关键字)

定义变量有多种形式

name=liyifeng

当值中不包含空格时,可以不需要引号。当值中需要包含空格时需要用引号包含。如果只是输出字符的字面值,单引号和双引号没有区别。当需要进行变量扩展等操作时,要使用双引号,详见shell引用。

# 没区别
info='helloworld'
info=helloworld

# 值有空格,必须要加引号。
info='hello world'
info=hello world

(2)使用变量

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

name=liyifeng
echo $name

也可以 echo ${name},

echo ${name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况。

注意:如果变量不存在,那么就把他替换成空字符串,所以不会报错。

(3)只读变量

(4)删除变量 unset

# 删除变量
unset name

 五、变量作用域

(1)局部变量 

局部变量在脚本或命令中定义,仅在当前shell进程中有效。

(2)全局变量

在当前shell中任何地方可以使用变量,且在子shell中也有效

通过命令 env 可以查看当前shell中的所有全局变量

要定义一个全局变量可以使用 export 命令,格式如下

export var=value

但是export定义的全局变量是临时的,当关闭执行定义的shell进程后,定义的变量就会被销毁,所以通过export定义的全局变量只能向下传递,也就是只能是父shell传递给子shell。

 

在外面访问不到info,因为通过export定义的全局变量只能向下传递,也就是只能是父shell传递给子shell。

 那我们在主shell中定义一个全局变量,然后在子shell里test.sh中引用这个变量试试看(向下传递)~

info这个变量能打印出来!

那如何定义一个所有shell都可以访问的变量呢。本质上来讲没有一个这样的变量。但是我们可以通过启动shell时预定义全局变量来实现这个目的。也就是接下来我们要讲的环境变量。

(3)环境变量 

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

环境变量本质上就是全局变量,只不过它是在启动终端(shell主进程)时通过执行初始化脚本预定义的。

启动终端后直接输入 env 命令 显示得所有的变量都是环境变量。要定义环境变量可以在以下文件中通过export定义:

  • ~/.bashrc 只对当前用户的终端有效
  • ~/.profile 只对当前用户的终端有效
  • /etc/bash.bashrc 对所有用户的终端有效

注意:不同linux,不同终端启动文件有所不同,但是原理相同

我们将wangdaxia 追加到.bashrc文件里,然后我们每打开一个终端,他就会打印一个

想必大家应该都知道怎么定义环境变量了吧。

我们来操作一下。在 .bashrc文件中配置一个name变量

# 步骤一
cd /root

# 步骤二
vim .bashrc

然后我通过 env 查看全局环境变量, 看到了我刚才添加的环境变量name。

 那在脚本里我也可以用啦。因为这个环境里面就有name变量啦。

我们在脚本里面引用这个环境变量。

然后执行这个脚本 发现这个name变量能引用到。完成啦。

 

下一节讲shell 数据类型、数组啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值