文章目录
1. 变量
在我们执行脚本的时候,脚本或命令有一些输出,需要给下一个命令或者脚本使用,那么我们就需要变量来存储;
1.1 变量的命名
在shell中变量的命名规则和c语言类似,可以使用字母、数字、下划线,但是不可以使用数字开头一般建议使用有意义的字母等命名;
1.2 变量的定义及赋值
在shell中变量不用去区分数据的类型,也就是shell的变量是弱类型的;
- 变量名 = 值:
nums=3;
- 使用let赋值
let ret=3 + 6;
- 将命令赋值给变量 let comm=ls;
- 将命令的结果赋值给变量 例如使用
(
)
或
者
‘
‘
:
‘
l
e
t
C
=
() 或者``:`letC=
()或者‘‘:‘letC=(ls -l /etc)`
在上述赋值 = 号的两侧是不能有空格的,不然会报错;
例如我们定义两个变量:
然后打印出变量:
注意如果要定义的变量值有空格,则需要使用""或者’'括起来,例如:
我们定义了一个字符串类型的便令str1,然后使用echo输出到了控制台;
2. 变量的引用和作用范围
变量前面加“
”
就
是
对
变
量
的
引
用
,
一
般
规
范
的
使
用
‘
”就是对变量的引用,一般规范的使用`
”就是对变量的引用,一般规范的使用‘{变量名}`,在使用中大括号一般可以省略;那么什么时候是必须要使用的呢,这里示例如下:
定义一个变量str1,并使用echo输出;
可以看到这时候可以不用使用大括号,但是当我们需要在后面继续添加字符串的时候,如图:
如果不加大括号,jiu会把变量名和加的字符串一起认为是一个,所以输出是空;只要使用大括号就可以正确输出:
2. 作用范围
定义的变量默认是在当前终端有效或当前脚本有效;export 加上变量名 就可以在子进程中使用;
- 首先使用
export
使定义的变量在子进程中可用, - 然后使用
bash
命令创建一个子进程, - 可以看到子进程中可以输出 str1的值,
- 要退出子进程使用
exit
命令就可以退出;
unset
可以取消变量的赋值 ;
可以看到使用unset后,之前定义的变量已经清空;
一般后续不需要使用的变量,建议即时清空;
3. 环境变量
一般的我们使用env命令就可以查看系统默认定义的变量:
env | more
效果如下:
使用echo 变量名就可以查看某个变量的输出例如: echo $USER
,注意默认的变量一般都是大写;其他常用的如下:
echo $PATH
echo $UID
echo $PS1
PS1可以修改终端的提示命令,使其显示的更加又好;
set 可以查看到比env 更多的变量;
4. 脚本实战
创建一个.sh文件,添加一下内容:
#!/bin/bash
# 输出当前的进程ID
echo '当前的进程ID'+$$
#读取位置参数
pos1=$1
pos2=$2
echo 'pos1 = '${pos1}' pos2='${pos2}
我们执行脚本前最好加上可执行权限:chmod u+x test.sh
,我们在脚本目录下执行./public/test.sh -l -u
携带两个参数效果如下:
这样就可以读取到输入的变量;
技巧: 我们使用$1读取到的值有可能是空值,我们读取的时候可以加一个下划线:
echo ${1}_
这样就可以防止空置导致的程序出错;或者使用echo ${1-_};
含义是如果没有参数我们就是用下划线替换,如果有就忽略下滑线;
修改脚本:
#!/bin/bash
# 输出当前的进程ID
echo '当前的进程ID'+$$
#读取位置参数
pos1=$1
echo 'pos1 = '${pos1-_}' pos2='${2-_}' pos3='${3-_}
运行结果如下: