shell编程之bash变量、环境变量

1、什么是变量

1.1 变量的定义

通俗:可以变的量就是变量。如:X=10,X=100,X先等于10,后等于100,这个X就是一个变量

1.2 变量的命名规则

  • 以字母和下划线开头的,中间的只能由字母、数字下划线组成
  • 变量名在有效的范围内必须唯一
  • 在bash中,变量的默认类型都是字符串类型
  • 命名必须有含义,方便查看。如:名字为name

1.3 变量的分类

  • 用户自定义变量:变量是自定义的
  • 环境变量:主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
  • 位置参数变量:主要用来想脚本中传递参数或数据的,变量名不能自定义,变量作用固定
  • 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

2、用户自定义变量

2.1 定义变量

变量名=变量值

2.2 变量的调用

echo $变量名

练习:调用变量

[root@catyuan ~]# x=12
[root@catyuan ~]# echo $x
12

2.3 变量的叠加

变量名="$变量名"叠加的内容
或
变量名=${变量名}叠加的内容

练习:

[root@catyuan ~]# echo $x
12
[root@catyuan ~]# x="$x"345
[root@catyuan ~]# echo $x
12345
[root@catyuan ~]# x=${x}67
[root@catyuan ~]# echo $x
1234567

2.4 变量的查看

set			查看系统中所有存在的变量
set -u		使用之后,调用未声明的变量时会报错(默认无提示)

练习:

[root@catyuan ~]# set -u
[root@catyuan ~]# echo $a
-bash: a: unbound variable

2.5 变量的删除

unset 变量名

3、环境变量

对系统生效的环境变量名和变量作用是固定的

3.1 环境变量与用户自定义变量的区别

用户自定义变量只在当前的shell中生效,环境变量在当前shell和这个shell的所有子shell中生效
环境变量是全局变量,用户自定义变量是局部变量

3.2 设置环境变量

export 变量名=变量值
或者
变量名=变量值
export 变量名

3.3 查看环境变量

set		查看所有变量
env		仅查看环境变量

3.4 变量的调用

echo $变量名

3.5 变量的删除

unset 变量名             ##不能在子shell中删除父shell的环境变量

3.6 常用的环境变量

HOSTNAME		主机名
SHELL			当前shell
TERM			终端环境
HISTORY			历史命令条数	
SSH_CLIENT		当前操作环境是用ssh连接的,这里记录客户端IP
SSH_TTY			ssh连接的终端时的pts/1
USER			当前登录的用户

3.7 PATH环境变量

PATH变量:系统查找命令的路径,路径用冒号分隔

查看PATH环境变量

[root@catyuan ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

增加PATH变量的值

PATH="$PATH":需要加的路径           ##临时生效

3.7 PS1环境变量

PS1变量:命令提示符设置
\d:显示日期,格式为“星期 月 日”
\H:显示完整的主机名
\t:显示24小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\$:提示符。root用户显示是“#”,普通用户为“$”

3.8 语系变量
3.8.1 查询当前系统语言

第一种:
[root@catyuan ~]# locale
LANG:定义系统主语言的变量           ##当前生效的
LC_ALL:定义整体语言的变量
第二种:
[root@catyuan ~]# echo $LANG
en_US.UTF-8

3.8.2查询linux中还支持的语言

[root@catyuan ~]# locale -a

3.8.3 默认系统语言
这个文件里的是下次开机之后生效的语言环境

[root@catyuan ~]# cat /etc/sysconfig/i18n     ##7之前的版本
[root@catyuan ~]# cat /etc/locale.conf        ##7版本
LANG="en_US.UTF-8"

4、位置参数变量

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

位置参数变量作用
$nn为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 10 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,10以上的参数需要用大括号包含,如 910{10}
$*这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$#这个变量代表命令行中所有参数的个数

4.1.1 练习:求两数的和

[root@catyuan ~]# vim /root/sum.sh
#!/bin/bash
num1=$1
num2=$2
##变量sum是num1和num2
sum=$(($num1+$num2))
##打印变量sum的值
echo $sum
[root@catyuan ~]# chmod 755 /root/sum.sh 
运行脚本
[root@catyuan ~]# /root/sum.sh 1 2         ##要在脚本后面加两个参数才能去运行
3

4.1.2 练习:

[root@catyuan ~]# vim /root/test.sh
#!/bin/bash
echo "\$#can shu shi:$#"
echo "\$*can shu ye shi:$*"
echo "\$@can shu ge shu shi:$@"
[root@catyuan ~]# /root/test.sh 11 22 33 44
$#can shu shi:4
$*can shu ye shi:11 22 33 44
$@can shu ge shu shi:11 22 33 44

4.1.3 练习: ∗ 与 *与 @的区别

[root@catyuan ~]# vim /root/test1.sh
#!/bin/bash
# $*中的参数是一个整体,所以这个循环只会循环一次
for i in "$*"
        do
                echo "$i"
        done

# $@中有几个参数循环几次
for y in "$@"
        do
                echo "$y"
        done
[root@catyuan ~]# chmod 755 /root/test1.sh 
[root@catyuan ~]# /root/test1.sh 1 2 3 4 5
1 2 3 4 5
1
2
3
4
5

5、预定义变量

预定义变量作用
$?最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量 的值不是0,则证明上一个命令执行错误。
$$当前进程的进程号(PID)
$!后台运行的最后一个进程的进程号(PID

练习:$?

[root@catyuan ~]# ls
anaconda-ks.cfg  Documents  hello.sh              la.log  Music     Public  Templates  test1.sh   test.log  Videos
Desktop          Downloads  initial-setup-ks.cfg  ll.log  Pictures  sum.sh  test1.log  test2.log  test.sh
[root@catyuan ~]# echo $?
0
[root@catyuan ~]# lkd 
bash: lkd: command not found...
[root@catyuan ~]# echo $?
127
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值