Shell基础——Bash变量

本文前提是已经大概掌握了Linux的一些基础命令。如果你还没有掌握Linux的一些基础命令,实例代码可能看起来有点费劲。如果想很快的了解Linux的基础知识,前面的两三篇文章足够让你在很短时间内了解Linux。博客链接请点击此~~

1.Bash变量

 1.1 概念

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

 1.2 变量设置规则
  • 变量名称可以由字母、数字和下划线组成 ,但是不能以数字开头。如果变量名是 “2name”则是错误的。
  • 在Bash中,变量的默认类型都是字符串型 ,如果要进行数值运算,则必修指定变量类型为数值型。
  • 变量用等号连接值,等号左右两侧不能有空格。
  • 变量的值如果有空格,需要使用单引号或双引号包括。
  • 在变量的值中,可以使用“\”转义符。
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含 “$变量名”或用${变量名}包含。
[cfp@bogon ~]$ name=3
[cfp@bogon ~]$ echo $name
3
[cfp@bogon ~]$ name="$name"456
[cfp@bogon ~]$ echo $name
3456
  • 如果是把命令的结果作为变量值赋予变量 ,则需要使用反引号或$()包含命令。
  • 环境变量名建议大写,便于区分。
 1.3 变量分类
  • 用户自定义变量,变量名、变量值,用户都可以自定义。
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。系统默认的环境变量只能更改变量值,不能更改变量名。但是,环境变量也允许用户自己手工添加新的环境变量,用户可以自己定义变量名、变量值。
  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。变量值可以改变,不允许添加新的位置参数变量。
  • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。变量值可以改变,不允许添加新的预定义变量。

2.用户自定义变量

变量定义 :
[cfp@bogon ~]$ name=“Liang jie”

变量叠加(上边讲过):
[cfp@bogon ~]$ aa=123
[cfp@bogon ~]$ aa="$aa"456
[cfp@bogon ~]$ aa=${aa}789

变量调用:
[cfp@bogon ~]$ echo $name

变量查看 :
[cfp@bogon ~]$set    #查看系统当中的所有变量

变量删除:
[cfp@bogon ~]$ unset name

3.环境变量

 3.1 概念

  用户自定义变量只在当前的Shell中生效, 而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。 那么,如何进入子Shell呢?——直接在命令行输入你想进入的Shell的名称,csh或者bash都可以,exit可以退出当前Shell。pstree可以以树状图的方式查看进程之间的派生关系。

  没有进入子Shell之前默认bash shell:
在这里插入图片描述
以下命令进入子Shell(子shell的子shell…):l

[cfp@bogon ~]$ sh
sh-5.0$ bash
[cfp@bogon ~]$ bash
[cfp@bogon ~]$ pstree

进入之后:
在这里插入图片描述

 3.2 设置环境变量

(1)export 变量名=变量值(如果之前已经定义过这个变量,可以直接export 变量名)

[cfp@bogon ~]$ export name='hello world'  #设置环境变量
[cfp@bogon ~]$ bash   #进入子Shell
[cfp@bogon ~]$ echo $name   #调用环境变量
hello world

(2)env    # 查所有环境变量

(3)unset 变量名    #删除环境变量

[cfp@bogon ~]$ unset name
 3.3 系统常见环境变量

常见的系统环境变量(重点讲2个):

(1)PATH:系统查找命令的路径,用 :分割的一个一个路径。在Linux中,执行文件要想运行,无论是系统执行文件还是自己写的脚本,要想运行,都需要路径。但是,有没有想过,为什么系统命令不用路径就可以执行呢?原因就是PATH环境变量。当你敲一个命令的时候,系统会自动去PATH下面的所有路径中去找,直到找到了命令就会执行。如果找不到,就会报错。如果用户自己写了一个脚本,想直接用文件名来运行这个脚本,那么就要将文件路径加到PATH搜索的路径中去。让系统能找到他

[cfp@bogon ~]$ echo $PATH   #查看PATH环境变量
/home/cfp/.local/bin:/home/cfp/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
[cfp@bogon ~]$ chmod 755 /home/cfp/text/a.txt  #给要运行文件的权限
[cfp@bogon ~]$ PATH="$PATH":/home/cfp/text  #在PATH路径中添加要运行文件的路径
[cfp@bogon ~]$ echo $PATH   #查看PATH环境变量
/home/cfp/.local/bin:/home/cfp/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/cfp/text
[cfp@bogon ~]$ a.txt  #直接输入文件名,即可运行输出hello world
hello world

(2)PS1:定义系统提示符的变量 (提示符就是这个:[cfp@bogon ~]$)
\d:显示日期,格式为“星期 月 日”
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为“HH:MM:SS”
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\#:执行的第几个命令
\$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户 会显示提示符为“$”

[cfp@bogon ~]$ echo $PS1
[\u@\h \W]\$
[cfp@bogon ~]$ PS1='[\u@\t \w]\$ '
[cfp@20:37:16 ~]$ cd /usr/local/src
[cfp@20:37:37 /usr/local/src]$ echo PS1

4.位置参数变量

通过人为的写参数,来将参数传递到脚本当中。

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

实例如下:

[cfp@bogon ~]$ mkdir /tmp/sh   #在tmp下面建立一个目录sh
[cfp@bogon ~]$ touch /tmp/sh/canshu.sh  #在sh下面建立一个文件canshu.sh
[cfp@bogon ~]$ vim /tmp/sh/canshu.sh  #编辑这个文件
[cfp@bogon ~]$ cat /tmp/sh/canshu.sh   #canshu.sh 文件写入的内容
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
[cfp@bogon ~]$ chmod 755 /tmp/sh/canshu.sh  #赋予权限
[cfp@bogon ~]$ /tmp/sh/canshu.sh     #$0默认命令本身
/tmp/sh/canshu.sh


[cfp@bogon ~]$ /tmp/sh/canshu.sh 11 22 33   #将11传给$1,22传给$2,33传给$3,空格隔开
/tmp/sh/canshu.sh
11
22
33

实例二:

[cfp@bogon ~]$ vim /home/cfp/text/a.txt   #写一个脚本,脚本内容如下
[cfp@bogon ~]$ cat /home/cfp/text/a.txt   
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo 'sum is:'$sum
[cfp@bogon ~]$ chmod 755 /home/cfp/text/a.txt  #赋予权限
[cfp@bogon ~]$ /home/cfp/text/a.txt 23 34   #对$1和 $2进行赋值
sum is:57

实例三:

[cfp@bogon ~]$ cat /home/cfp/text/a.txt 
#!/bin/bash 
echo "A total of $# parameters" # 使用 $# 代表所有参数的个数
echo "The parameters is: $*"  # 使用 $* 代表所有的参数
echo "The parameters is: $@"  # 使用 $@ 代表所有的参数
[cfp@bogon ~]$ /home/cfp/text/a.txt 21 33 4 5 6 45 in out
A total of 8 parameters
The parameters is: 21 33 4 5 6 45 in out
The parameters is: 21 33 4 5 6 45 in out

5.预定义变量

 5.1 预定义变量
预定义变量作用
$?最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
$$当前进程的进程号(PID)
$!后台运行的最后一个进程的进程号(PID)
[cfp@bogon ~]$ ls
Desktop    Downloads  Pictures  Templates  Videos
Documents  Music      Public    text
[cfp@bogon ~]$ echo $?
0   #证明上一个命令是正确的
[cfp@bogon ~]$ lss
bash: lss: command not found...
Similar command is: 'ls'
[cfp@bogon ~]$ echo $?  
127  #证明上一个命令是错误的
[cfp@bogon ~]$ echo $$
2338
 5.2 接收键盘输入

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

实例:

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

6.总结

  文章总结了一些常见的Linux中的变量。用户自定义变量、环境变量、位置参数变量、预定义变量。通过一些实例来讲解这些变量的含义,以及变量的使用与限定条件。
  文章如有不当之处,还请多多指教~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值