shell脚本编程(关于变量)

目录

一.变量运算

1.1算术运算符

1.2运算方式

1.3浮点运算

二.变量引用

2.1转义符号:\

2.2变量的引用与引号:

2.3读取用户输入变量

三.变量置换

3.1符号-

3.2符号=

3.3符号+

3.4符号?

四.匹配截取

4.1截取语法 :

4.2截取语法 #

4.3截取语法 %

4.4变量替代


一.变量运算

1.1算术运算符

+加法运算符
-减法运算符
*乘法运算符
/除法运算符
%取余运算符
==等于运算符
!=不等于运算符
=赋值运算符

运算符具有优先级(从高到低):

优先级说明
* 、/、%乘、除、取余
+、-加、减
==、!=相等、不等
=赋值

1.2运算方式

在默认情况下 Shell 中的运算都是看作字符串在操作不会直接进行算术运算(因此在某些情况下字符串一定要加引号括起来),在shell脚本语言中算术运算的主要方法有:

1.expr算术表达式

使用expr算术运算符需要注意:(运算符之间要有空格,例如:expr<空格>变量<空格>运算符)(乘法运算符要加\),如下所示:

#加法:
[root@localhost ~]# expr 2 + 3
5

#乘法(乘法一定记得加\)
[root@localhost ~]# expr 2 \* 3
6

2.$[ 算术表达式 ]

这种方法没有格式限制,运算符前后可以不加空格,例如:

[root@localhost ~]# echo $[5+9]
14
[root@localhost ~]# echo $[ 5+9 ]
14

3.$((算术表达式))

这种方式和 $[算术表达式] 一样,如下所示:

[root@localhost ~]# echo $(( 5 + 9 ))
14

[root@localhost ~]# echo $(( 11 * 9 ))
99

扩展(取随机数):

$RANDOM%较大正整数 +较小正整数

例如:取1-50之间的随机数

echo $(($RANDOM%50+1)) 

1.3浮点运算

bash本身不能做小数计算:需要bc命令转换 ,例如:

[root@localhost ~]#echo "scale=2;6/4" | bc

scale: 精度,简单理解为小数点后几位。例如:

[root@localhost ~]#echo "scale=3;10/3" | bc
3.333

二.变量引用

2.1转义符号:\

用法:

如果字符有特殊含义 ,则 \ 去除特殊含义,回归字符本身   
如果字符没有特殊含义,则 \  让其具有有特殊含义
当一个字符被引用时,其特殊含义被禁止

特殊情况: \n  换行符   \t  制表符

2.2变量的引用与引号:

完全引用:'' //强引 硬引
部分引用:"" //弱引 软引
执行引用:`` // 用于执行命令,引号内部必须是可执行的命令

2.3读取用户输入变量

read:功能就是读取键盘输入的值,并赋给变量 
例如:

#read -t 5 var
#read -p "提示信息" var

read后面的变量var可以只有一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二 个变量,如果输入数据个数过多,则最后所有的值都给最后一个变量

参数解释:
-p "后面的内容为提示信息,需要打印出来" 
-s '后面的内容是加密信息,不要输出' 
-t 超时时间

三.变量置换

3.1符号-

${parameter:-word}
若 parameter 为空或未设置,则用 word 代替 parameter 进行替换,parameter 的值不变 
若 parameter 不为空,则不替换,parameter 的值不变 

举例:

# a=1
# unset b #设置b的值为空
# a=${b:-3} 
# echo $a
3
# echo $b
#b的值依旧为空
# a=1
# b=2
# a=${b:-3} # echo $a
2
# echo $b
2

 

 

3.2符号=

${parameter:=word}
若 parameter 为空或未设置,则用 word 代替 parameter 进行替换,parameter 的值改变 
若 parameter设置了,则 不替换,parameter 的值不变

举例:

# a=1
# unset b#设置b的值为空
# a=${b:=3}
# echo $a
3
# echo $b  #b的值发生改变
3
# a=1
# b=2
# a=${b:=3}
# echo $a
2
# echo $b   #b的值不变
2

 

3.3符号+

${parameter:+word}
若 parameter 设置了,则用 word 代替 parameter 进行替换,parameter 的值不变

举例:

# unset b
# a=${b:+3}
# echo $a
                #a的值为空
# echo $b
                #b的值为空



# a=1
# b=2
# a=${b:+3}
# echo $a
3                #a的值改变
# echo $b 
2                #b的值不变
#

 

3.4符号?

${parameter:?message}
若 parameter 为空或未设置,则 message 作为标准错误打印出来,这可用来检查变量是否正确设置

举例:

# unset a
# ${a:?unset a}
-bash: a: unset a

四.匹配截取

4.1截取语法

1.${变量:截取位数}

从左至右的截取位数开始,截取到结束

举例:

[root@localhost ~]# a=12345678
[root@localhost ~]# echo ${a:5} //从第5位开始截取直到结束
678

2.${变量:截取位数:正数截取位数}

截取位是正数,则从左至右的截取位数开始,截取正数截取位数的字符数

举例:

[root@localhost ~]a=12345678
[root@localhost ~]# echo ${a:3:4}   从左边第三位开始,往后截取四个字符
4567

3. ${变量:截取位数:负数截取位数}

截取位是负数,则从右至左的截取位数开始,截取负数截取位数的字符数

[root@localhost ~]a=12345678
[root@localhost ~]# echo ${a:2:-1}    #截取从左往右数2位,从右往左数一位之间的内容
34567

看上去很复杂,大家只需要记住口诀就行了:

正数从左至右,负数从右至左 

4.2截取语法 #

1.${变量#关键词}

 若变量内容从头开始的数据符合『关键词』,则将符合的最短数据切除

2.${变量##关键词}

若变量内容从头开始的数据符合『关键词』,则将符合的最长数据切除

[root@localhost ~]# url=www.sina.com.cn 
[root@localhost ~]# echo ${#url} //获取变量的长度 
15
[root@localhost ~]# echo ${url} //正常显示变量 
www.sina.com.cn

[root@localhost ~]# echo ${url#*.}   从前往后,最短匹配
sina.com.cn
[root@localhost ~]# echo ${url##*.}  从前往后,最长匹配
cn

4.3截取语法 %


1.${变量%关键词}

 若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据切除
2.${变量%%关键词}

若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据切除

[root@localhost ~]# url=www.sina.com.cn 
[root@localhost ~]# echo ${url%.*}   从后往前,最短匹配
www.sina.com
[root@localhost ~]# echo ${url%%.*}  从后往前,最长匹配
www

4.4变量替代


1.${变量/旧字符串/新字符串}

若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串替代』
2.${变量//旧字符串/新字符串}

若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串替代』
 

变量内容的替换
$ a=123456123789
$ echo ${a/1/}                  第一次匹配的被替换
23456123789
$ echo ${a//1/}                 全局的匹配被替换
2345623789
$ echo ${a/1/x}
x23456123789
$ echo ${a//1/x}
x23456x23789

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨影萧萧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值