Linux笔记13-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:定义系统提示符的变量

\d:显示日期,格式为“星期 月 日”
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为“HH:MM:SS”
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\#:执行的第几个命令
\$:提示符。如果是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

#!/bin/bash
num1=$1
num2=$2
sum=$(( $num1 + $num2))

#变量sum的和是num1加num2
echo $sum

#打印变量sum的值

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

#!/bin/bash
echo "A total of $# parameters"
#使用$#代表所有参数的个数
echo "The parameters is: $*"
#使用$*代表所有的参数
echo "The parameters is: $@"
#使用$@也代表所有参数

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

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

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

预定义变量

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

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

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

#!/bin/bash
# Author: renxing (E-mail: renxing@qq.com)
echo "The current process is $$"

#输出当前进程的PID。
#这个PID就是variable.sh这个脚本执行时,生成的进程的PID
find /root -name hello.sh &

#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后台执行,工作管理我们在系统管理章节会详细介绍
echo "The last one Daemon process is $!"

接收键盘输入 (read.sh)

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

选项:

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浮尘笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值