11.2、构建基本的shell脚本之二(使用变量)

写在前面的话:博客中所有的脚本文件执行之前都要加上此命令:

chmod u+x <文件名>		#给文件的属主添加执行权限

一、环境变量

在脚本中,你可以在环境变量名称之前加上美元符号( $ )来使用这些环境变量。

[root@CHENDAJIE sh.test]# cat test2.sh 
#!/bin/bash
# display user information from the system.
echo "User info for userid: $USER"
echo UID: $UID
echo HOME: $HOME

$USER、$UID、$HOME环境变量用来显示已登录的用户的有关信息
输出如下:

[root@CHENDAJIE sh.test]# ./test2.sh 
User info for userid: chendajie
UID: 0
HOME: /root

echo命令中的环境变量会在脚本运行时替换成当前值。下面的例子使用了转义符- -写《鸟哥的Linux私房菜基础篇学习笔记》时会涉及到。此处不多做解释。

[root@CHENDAJIE sh.test]# echo "The cost of the item is $15" 
The cost of the item is 5
[root@CHENDAJIE sh.test]# echo "The cost of the item is \$15"
The cost of the item is $15

二、 用户变量

例如:

定义临时变量(因为前几章没有写博客,所以需要等等把它们补上来。)

[root@CHENDAJIE sh.test]# var1=10
[root@CHENDAJIE sh.test]# var2=-57
[root@CHENDAJIE sh.test]# var3=testing
[root@CHENDAJIE sh.test]# var4="still more testing"

查看test3.sh脚本

[root@CHENDAJIE sh.test]# cat test3.sh 
#!/bin/bash
# testing variables
days=10
guest="Jie"
echo "guest checked in $days days ago"
days=5
guest="Chen"
echo "$guest checked in $days days ago"

执行

[root@CHENDAJIE sh.test]# ./test3.sh 
guest checked in 10 days ago
Chen checked in 5 days ago

变量每次被引用时,都会输出当前你赋给它的值。
查看tesh4.sh文件

[root@CHENDAJIE sh.test]# cat test4.sh 
#!/bin/bash
# assigning a varible value to another varible

value1=10
value2=$value1
echo The resulting value is $value2

执行:

[root@CHENDAJIE sh.test]# ./test4.sh 
The resulting value is 10

当忘记美元符时:
将test4.sh文件内容改为下列内容:

[root@CHENDAJIE sh.test]# vim test4.sh 
#!/bin/bash
# assigning a varible value to another varible

value1=10
value2=value1	#此处没有美元符
echo The resulting value is $value2

执行test4.sh

[root@CHENDAJIE sh.test]# ./test4.sh   
The resulting value is value1

可以看到此时shell将变量名解释成普通的文本字符串。

三、命令替换

有两种方法可以将命令输出赋给变量:
1、反引号字符( ` )
2、$()格式

查看脚本内容

[root@CHENDAJIE sh.test]# cat test5.sh 
#!/bin/bash
#
testing=$(date)		#此处$(date)替换成`date`也可以
echo ""The date and time are: " $testing

执行文件

[root@CHENDAJIE sh.test]# ./test5.sh 
The date and time are:  2019年 10月 08日 星期二 20:49:56 CST

在这个例子中:变量testing获得了date命令的输出,然后用echo语句显示出它的值。
下面这个例子的作用是:
在脚本中通过命令替换获得当前日期并用它来生成唯一文件名。
查看脚本内容:

[root@CHENDAJIE sh.test]# cat test6.sh 
#!/bin/bash
# copy the /usr/bin directory listing to a log file
today=$(date +%y%m%d)
ls /usr/bin -al > log.$today

给脚本文件执行权限:

[root@CHENDAJIE sh.test]# chmod u+x test6.sh 

执行后输出结果,可以看到此时显示了一个新文件

[root@CHENDAJIE sh.test]# ./test6.sh 
[root@CHENDAJIE sh.test]# ls
log.191008  test1.sh  test2.sh  test3.sh  test4.sh  test5.sh  test6.sh

注意:
命令替换会创建一个子shell来运行对应的命令。子shell(subshell)是由运行该脚本的shell所创建出来的一个独立的子shell(child shell)。正因如此,子shell所执行命令是无法使用脚本中所创建的变量的
在命令行提示符下**使用路径./运行命令的话,也会创建出子shell要是运行命令的时候不加入路径,就不会创建子shell。**如果你使用的是内建的shell命令,并不会涉及子shell。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值