自定义变量
在Linux的shell编程中,变量是具有以下这些特性的:
1、定义一个变量不需要指定类型,直接 变量名=值 即可,注意:等号两边不能有空格;
2、变量值可以改变值的,变量的值根据赋予它的值而确定;
3、shell中定义一个变量是不需要指定它的类型的,因为shell属于弱类型语言,变量的类型根据赋予它的值而确定;
4、变量的命名只能是 大小写字母、数字、下划线_ 而且不能是数字开头;
5、shell中变量名字符区别大小写;
6、要输出变量的值,必须要加$符号;
7、变量又分为系统变量、用户自定义变量,系统变量是所以用户都可以使用的变量,用户自定义的变量只有用户自己可以使用,用户自定义的变量又可以提升为系统变量让其它用户使用;
3种变量的语法格式:①variable=value ② variable=‘value’③ variable=“value”
如果 value 不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的。以单引号’ '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
以双引号" “包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。如:
url=“http://c.biancheng.net”
website1='C语言中文网:
u
r
l
′
w
e
b
s
i
t
e
2
=
"
C
语
言
中
文
网
:
{url}' website2="C语言中文网:
url′website2="C语言中文网:{url}”
echo $website1
echo
w
e
b
s
i
t
e
2
运
行
结
果
:
C
语
言
中
文
网
:
website2 运行结果: C语言中文网:
website2运行结果:C语言中文网:{url}
C语言中文网:http://c.biancheng.net
建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。
使用一个定义过的变量,只要在变量名前面加美元符号$即可,变量名外面的花括号{ }是可选的,推荐给所有变量加上花括号{ },这是个良好的编程习惯。如:
author=“严长生”
echo $author
echo
a
u
t
h
o
r
S
h
e
l
l
也
支
持
将
命
令
的
执
行
结
果
赋
值
给
变
量
,
常
见
的
有
以
下
两
种
方
式
:
v
a
r
i
a
b
l
e
=
‘
c
o
m
m
a
n
d
‘
v
a
r
i
a
b
l
e
=
{author} Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式: variable=`command` variable=
authorShell也支持将命令的执行结果赋值给变量,常见的有以下两种方式:variable=‘command‘variable=(command)
第一种方式把命令用反引号包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;第二种方式把命令用$()包围起来,区分更加明显,所以推荐使用这种方式。
shell中变量没有类型,shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。
在定义变量前没有必要先分配内存,用完后也没有必要释放内存,变量可以不用事先定义就可以直接引用,如果变量没有定义过,它就相当于一个空变量,此时引用它只会返回一个空值而不会报错。
变量定义语句的等号两边不能有空格,变量的名字可以是字母、数字以及下划线,但不能以数字开头。
在变量名前加$符号就可以引用变量的值,
变量的定义语法:
sum=10 #定义了一个sum变量并赋值数字10
like=“I like you” #定义了一个字符串变量like,并且字符串常量要用双引号或单引号引起来
变量之间可以相互赋值,但一定要加
,
如
:
a
=
,如:a=
,如:a=b
输出变量的值:
echo $sum #输出变量sum的值
echo $like #输出变量like的值
用export 定义环境变量:①export val_name=value ②val_name=value export val_name
只读变量用readonly关键字:①readonly 变量=value ②变量=value readonly 变量
一旦变量被定义为readonly,其值不能被改变,变量也不能被删除。
系统变量
$0 :表示当前脚本的名字;
$n :n可以是0-9,表示脚本的第n个参数,其中0已经表示当前脚本的名字;
$* :表示当前脚本的所有参数;
@
:
与
@ :与
@:与* 相同,也表示当前脚本的所有参数,for列表中用$@;
$# :表示当前脚本的参数个数;
$? :表示命令或程序执行完的状态,返回0表示执行成功,非0表示失败;
$$ :表示程序本身的PDI号;
演示示例:
[root@Centos8 ~]# cat cat.sh
#! /bin/bash
echo 脚本名称$0
echo 第一个参数$1
echo 第二个参数
2
e
c
h
o
所
有
参
数
2 echo 所有参数
2echo所有参数*
echo 参数个数KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ echo 程序的PID:$
echo 上一条命令是否执行成功:$?
[root@Centos8 ~]#
[root@Centos8 ~]# ./cat.sh #执行结果
脚本名称./cat.sh
第一个参数
第二个参数
所有参数
参数个数0
程序的PID:2198
上一条命令是否执行成功:0
[root@Centos8 ~]#
常见的环境变量
PATH :命令所在的路径,以冒号分割,当你在任意路径下执行一个命令时,系统会首先在PATH定义的路径下查找呢输入的命令;
UAER :打印当前用户名;
HOME :打印当前用户家目录;
PWD :显示当前所在路径;
SHELL :显示当前用户默认使用的shell;
ID :打印当前用户的ID信息;
HOSTNAME :显示主机名;
TERM :打印当前终端类型;
RANDOM :产生0-32767之间的随机整数
删除变量命令unset
系统提供unset删除变量,语法格式如下:
unset virb_name
注意:unset 不能删除一个只读变量
演示示例:
[root@Centos8 ~]# unset getdirname