shell编程(二)

10.4 Bash的变量

1、什么是变量

变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

2、变量设置规则

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
  • 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。
  • 变量用等号连接值,等号左右两侧不能有空格。
  • 变量的值如果有空格,需要使用单引号或双引号包括。
  • 在变量的值中,可以使用“\”转义符。
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用${变量名}包含。
  • 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
  • 环境变量名建议大写,便于区分。

3、变量分类
用户自定义变量
环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

4、本地变量(用户自定义变量)
变量定义 [[email protected] ~]# name=" ha ha"

变量叠加 [[email protected] ~]# aa=123 

[[email protected] ~]# aa="$aa"456 

[[email protected] ~]# aa=${aa}789

变量调用 [[email protected] ~]# echo $name

变量查看 [[email protected] ~]# set

变量删除 [[email protected] ~]# unset name

10.4.2 环境变量

1、环境变量是什么

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

2、设置环境变量
export 变量名=变量值
#申明变量
env
#查询变量
unset 变量名

#删除变量

3、系统常见环境变量

PATH:系统查找命令的路径

[[email protected] ~]# 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:定义系统提示符的变量

shell编程(二)

举例:
[[email protected] ~]# PS1='[\[email protected]\t \w]\$ '
[[email protected]:50:08 /usr/local/src]#PS1='[\[email protected]\@ \h \# \W]\$‘
[[email protected]:53 上午 localhost 31 src]#PS1='[\[email protected]\h \W]\$ '

10.4.3 位置参数变量 

位置参数实际是预定义变量的一种

shell编程(二)

例子1:
#!/bin/bash
num1=$1
num2=$2
sum=$(( $num1 + $num2))
#变量sum的和是num1加num2
echo $sum
#打印变量sum的值

例子2:
#!/bin/bash
echo "A total of $# parameters"
#使用$#代表所有参数的个数
echo "The parameters is: $*"
#使用$*代表所有的参数
echo "The parameters is: [email protected]"

#使用[email protected]也代表所有参数

例子3:$*与[email protected]的区别
#!/bin/bash
for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
   do
        echo  $i
   done

for y in "[email protected]"
#[email protected]中的每个参数都看成是独立的,所以“[email protected]”中有几个参数,就会循环几次
   do
          echo  $y
   done

10.4.4 预定义变量

1、预定义变量

shell编程(二)

#!/bin/bash
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 $!"


2、接收键盘输入
[[email protected] ~]# read [选项] [变量名]
选项:
-p “提示信息”:在等待read输入时,输出提示信息
-t 秒数: read命令会一直等待用户输入,使用 此选项可以指定等待时间
-n 字符数: read命令只接受指定的字符数,就会 执行
-s: 隐藏输入的数据,适用于机密信息的 输入

#!/bin/bash
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"

10.5 Bash的运算符

10.5.1 数值运算与运算符

1、declare声明变量类型
[[email protected] ~]# declare [+/-][选项] 变量名
选项:
-: 给变量设定类型属性
+: 取消变量的类型属性
-i: 将变量声明为整数型(integer)
-x: 将变量声明为环境变量
-p: 显示指定变量的被声明的类型

2、数值运算—方法1
[[email protected] ~]# aa=11
[[email protected] ~]# bb=22
#给变量aa和bb赋值

[[email protected] ~]# declare -i cc=$aa+$bb

方法2:expr或let数值运算工具
[[email protected] ~]# aa=11
[[email protected] ~]# bb=22
#给变量aa和变量bb赋值
[[email protected] ~]# dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两

侧必须有空格

方法3:“$((运算式))”或“$[运算式]”   推荐
[[email protected] ~]# aa=11
[[email protected] ~]# bb=22
[[email protected] ~]# ff=$(( $aa+$bb ))
[[email protected] ~]# gg=$[ $aa+$bb ]

3、运算符

shell编程(二)

10.5.2 变量测试与内容替换

通过x的值判断y

shell编程(二)

例子1:测试x=${y-新值}
[[email protected] ~]# unset y
#删除变量y
[[email protected] ~]# x=${y-new}
#进行测试
[[email protected] ~]# echo $x
new

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

[email protected] ~]# y=""

#给变量y赋值为空
[[email protected] ~]# x=${y-new}
#进行测试
[[email protected] ~]# echo $x10.6 环境变量配置文件

10.6.1 环境变量配置文件简介

1、source命令  让配置文件直接生效 不用重新登录
[[email protected] ~]# source 配置文件

[[email protected] ~]# . 配置文件

2、环境变量配置文件简介
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1、HOSTNAME等默认环境变量。

/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc

/etc 目录下的对所有用户生效  家目录对当前用户生效。


10.6.2 环境变量配置文件作用

shell编程(二)


10.6.3 其他配置文件和登录信息

1、注销时生效的环境变量配置文件
~/.bash_logout

2、其他配置文件
~/bash_history

3、Shell登录信息
本地终端欢迎信息: /etc/issue

shell编程(二)

远程终端欢迎信息: /etc/issue.net
转义符在/etc/issue.net文件中不能使用

是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(记得重启SSH服务)

登陆欢迎信息:/etc/motd 不管是本地登录,还是远程登录,都可以显示此欢迎信息