当前位置:   article > 正文

Linux笔记13-Bash变量和运算符_bash 变量运算

bash 变量运算

目录

用户自定义变量

环境变量

位置参数变量

预定义变量

Bash的运算符

数值运算与运算符

数值运算

运算符

变量测试与内容替换


用户自定义变量

变量设置规则

变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。

在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。

* 变量用等号连接值,等号左右两侧不能有空格。

* 变量的值如果有空格,需要使用单引号或双引号包括。

* 在变量的值中,可以使用“\”转义符

* 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用${变量名}包含。

* 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。

* 环境变量名建议大写,便于区分。

变量分类

 * 用户自定义变量(本地变量)

 * 环境变量:这种变量中主要保存的是和操作系统环境相关的数据。

 * 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。(位置参数变量其实是预定义变量的一种)

 * 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

◇ 本地变量(即:用户自定义变量)

(1)变量定义

[root@localhost ~]# name="shen chao"

(2)变量叠加

[root@localhost ~]# aa=123

叠加方法1:变量=”$变量”String

[root@localhost ~]# aa="$aa"456

叠加方法2:变量=${变量}String

[root@localhost ~]# aa=${aa}789

(3)变量调用

[root@localhost ~]# echo $name

(4)变量查看 set : 会看到系统所有的变量,包括 环境变量 和 系统变量 以及 自定义变量。

[root@localhost ~]# set

(5)变量删除

[root@localhost ~]# unset name

环境变量

用户自定义变量(本地变量)只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。

举个例子理解一下:本地变量就相当于普通的人,只有自己家里人和自己的朋友认识;环境变量相当于这个普通的人在某个领域做成了一个很大的成就(比如刚出名的明星),在这个领域都会有人认识他;环境变量写入配置文件,相当于这个人作为明星已经很红了,几乎全国甚至全世界人都认识。

◇ 设置环境变量

使用pstree查看当前父shell和子shell

export 变量名=变量值 #声明变量

env #查询变量

unset 变量名 #删除变量

◇ 系统常见环境变量

PATH:系统查找命令的路径

[root@localhost ~]# echo $PATH

/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

PATH="$PATH":/root/sh #PATH变量叠加

◇ PS1:定义系统提示符的变量

  1. \d:显示日期,格式为“星期 月 日”
  2. \h:显示简写主机名。如默认主机名“localhost”
  3. \t:显示24小时制时间,格式为“HH:MM:SS
  4. \T:显示12小时制时间,格式为“HH:MM:SS
  5. \A:显示24小时制时间,格式为“HH:MM
  6. \u:显示当前用户名
  7. \w:显示当前所在目录的完整名称
  8. \W:显示当前所在目录的最后一个目录
  9. \#:执行的第几个命令
  10. \$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”

举例:

 [root@localhost ~]# PS1='[\u@\t \w]\$ '

 [root@04:50:08 /usr/local/src]#PS1='[\u@\@ \h \# \W]\$ '

 [root@04:53 上午 localhost 31 src]#PS1='[\u@\h \W]\$ '

位置参数变量

$n,n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}.

$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待

$# 这个变量代表命令行中所有参数的个数

创建一个shell脚本,canshu1.sh

接下来,直接执行,不带任何参数:

这样的结果相当于只执行了 $0,就是命令的本身。

接下来,带参数运行的结果:

例子1:$n 加法计算器,canshu2.sh

  1. #!/bin/bash
  2. num1=$1
  3. num2=$2
  4. sum=$(( $num1 + $num2))
  5. #变量sum的和是num1加num2
  6. echo $sum
  7. #打印变量sum的值

例子2:$* $@ $# 分别演示,canshu3.sh

  1. #!/bin/bash
  2. echo "A total of $# parameters"
  3. #使用$#代表所有参数的个数
  4. echo "The parameters is: $*"
  5. #使用$*代表所有的参数
  6. echo "The parameters is: $@"
  7. #使用$@也代表所有参数

感觉 $* 和 $@ 没看出区别,下面就来演示:

例子3:$*与$@的区别 ,canshu4.sh

  1. #!/bin/bash
  2. for i in "$*"
  3. #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
  4. do
  5. echo "The parameters is: $i"
  6. done
  7. x=1
  8. for y in "$@"
  9. #$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
  10. do
  11. echo "The parameter$x is: $y"
  12. x=$(( $x +1 ))
  13. done

预定义变量

$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 这个是给程序看的,在脚本中判断一个命令是否正确执行就使用 $?

$$ 当前进程的进程号(PID)

$! 后台运行的最后一个进程的进程号(PID) ,(canshu5.sh)

  1. #!/bin/bash
  2. # Author: renxing (E-mail: renxing@qq.com)
  3. echo "The current process is $$"
  4. #输出当前进程的PID。
  5. #这个PID就是variable.sh这个脚本执行时,生成的进程的PID
  6. find /root -name hello.sh &
  7. #使用find命令在root目录下查找hello.sh文件
  8. #符号&的意思是把命令放入后台执行,工作管理我们在系统管理章节会详细介绍
  9. echo "The last one Daemon process is $!"

接收键盘输入 (read.sh)

[root@localhost ~]# read [选项] [变量名]

选项:

-p 提示信息:在等待read输入时,输出提示信息

-t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间

-n 字符数: read命令只接受指定的字符数,就会执行

-s: 隐藏输入的数据,适用于机密信息的输入,比如输入密码时。

  1. #!/bin/bash
  2. # Author: renxing (E-mail: renxing@qq.com)
  3. read -t 30 -p "Please input your name: " name
  4. #提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
  5. echo "Name is $name "
  6. read -s -t 30 -p "Please enter your age: " age
  7. #年龄是隐私,所以我们用“-s”选项隐藏输入
  8. echo -e "\n"
  9. echo "Age is $age "
  10. read -n 1 -t 30 -p "Please select your gender[M/F]: " gender
  11. #使用“-n 1”选项只接收一个输入字符就会执行(都不用输入回车)
  12. echo -e "\n"
  13. echo "Sex is $gender"

Bash的运算符

数值运算与运算符

出现上面的原因是,Linux中的变量默认都是字符串类型的。

declare声明变量类型

[root@localhost ~]# declare [+/-][选项] 变量名

选项:

-: 给变量设定类型属性

+: 取消变量的类型属性

-i: 将变量声明为整数型(integer)

-x: 将变量声明为环境变量

-p: 显示指定变量的被声明的类型

扩展:将一个变量声明为环境变量,使用 export,此时查看会看到 –x

数值运算

→ 方法1

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22 #给变量aa和bb赋值

[root@localhost ~]# declare -i cc=$aa+$bb

→方法2:expr或let数值运算工具 (不是很推荐)

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22 #给变量aa和变量bb赋值

[root@localhost ~]# dd=$(expr $aa + $bb) #dd的值是aa和bb的和。注意“+”号左右两侧必须有空格

→方法3:“$((运算式))”或“$[运算式]”(比较直观,强烈推荐)

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22

[root@localhost ~]# ff=$(( $aa+$bb ))

[root@localhost ~]# gg=$[ $aa+$bb ]

运算符

优先级         运算符             说明

13                 -, +                 单目负、单目正

12                 !, ~                 逻辑非、按位取反或补码

11                 * , / , %           乘、除、取模

10                 +, -                 加、减

9                 << , >>             按位左移、按位右移

8                 < =, > =, < , >   小于或等于、大于或等于、小于、大于

7                 == , !=                 等于、不等于

6                 &                         按位与

5                 ^                         按位异或

4                 |                         按位或

3                 &&                         逻辑与

2                 ||                         逻辑或

1                 =,+=,-=,*=,/=,%=,&=, ^=,|=, <<=, >>=          赋值、运算且赋值

备注:这里的“优先级”,数值越高,优先级越高!

[root@localhost ~]# aa=$(( (11+3)*3/2 )) #虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级

[root@localhost ~]# bb=$(( 14%3 )) #14不能被3整除,余数是2

[root@localhost ~]# cc=$(( 1 && 0 )) #逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0

变量测试与内容替换

例子1:测试x=${y-新值}

[root@localhost ~]# unset y #删除变量y

[root@localhost ~]# x=${y-new} #进行测试

[root@localhost ~]# echo $x

New #因为变量y不存在,所以x=new

[root@localhost ~]# y="" #给变量y赋值为空

[root@localhost ~]# x=${y-new} #进行测试

[root@localhost ~]# echo $x

[root@localhost ~]# y=old #给变量y赋值

[root@localhost ~]# x=${y-new} #进行测试

[root@localhost ~]# echo $x #结果:old

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/247053
推荐阅读
相关标签
  

闽ICP备14008679号