Bash变量
变量定义规则变量的分类用户自定义变量环境变量
用户自定义环境变量系统自带环境变量
PATH变量:系统查找命令的路径PS1变量:命令提示符设置LANG语系变量 位置参数变量预定义变量read—接受键盘输入declare声明变量类型 Bash变量 变量定义规则
变量名称可以由字母、数字、下划线组成,但是不能以数字开头,如果变量名是"2name",则是错误的。在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。变量用等号连接值,等号左右两侧不能有空格。变量的值如果有空格,需要用单引号或双引号,这里要注意双引号中"$"""反引号有特殊含义,单引号中括起来的内容都是普通字符。在变量的的之中,可以用""转义符。如果需要增加变量的值,那么可以进行变量值得叠加,不过变量需要用双引号包含"$ 变量名"或用${变量名}包含变量名。
例:
[root@localhost ~]# test=456[root@localhost ~]# test=123"$test"[root@localhost ~]# echo $test123456[root@localhost ~]# test=${test}789[root@localhost ~]# echo $test123456789
需要把命令的结果赋予变量时,需要使用反引号或"$()"将命令括起来。环境变量名建议大写,好区分。 变量的分类
用户自定义变量:这种变量是最常见的变量,有用户自由定义变量名和变量的值。环境变量:这种变量主要保存的是和系统操作环境中相关的数据,分为用户自定义环境变量和系统自带环境变量,用户自定义环境变量可以自定义变量名和变量的作用以及变量值,系统自带环境变量变量名是固定的,变量作用也是固定的。位置参数变量:这种变量主要就是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。 用户自定义变量
变量查看
[root@localhost ~]# set 选项
选项:
-u:如果设定此选项,调用未声明变量时会报错(默认无任何提示)-x:如果设定此选项,在命令执行之前,会把命令先输出一次不加选项时,set的命令就是查看一部分环境变量和所有自定义变量,另一部分环境变量可以用env命令查看。
例:
[root@localhost ~]# set -u[root@localhost ~]# echo $age-bash: age: 未绑定的变量
变量删除
[root@localhost ~]# unset 变量名
环境变量 用户自定义环境变量用户自定义环境变量其实和用户自定义变量更相似,有一点不同是用户自定义变量不能在子Shell中使用,而用户自定义环境变量可以在子Shell中使用。
环境变量设置
#用export命令来声明环境变量[root@localhost ~]# export NAME="root"
环境变量的查询和删除
env命令和set命令的区别是,set命令可以查看所有变量,而env命令只能查看环境变量
#删除环境变量[root@localhost ~]# unset NAME#查找环境变量[root@localhost ~]# env | grep HOSTHOSTNAME=localhost.localdomain
系统自带环境变量 PATH变量:系统查找命令的路径查询PATH环境变量的值
[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
往PATH变量添加路径
[root@localhost ~]# PATH="$PATH":/root/sh[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/sh
除了PATH中含有的路径,其他路径的命令都需要输入绝对路径运行命令。
PS1变量:命令提示符设置[root@localhost ~]#
PS1是用来定义命令行提示符的,可以按自己的需求定义自己喜欢的提示符,PS1可以支持以下选项:
d:显示日期,格式为"星期 月 日"
H:显示完整的主机名。
h:显示简写的主机名。
t:显示24小时制时间。
T:显示12小时制时间。
A:显示24小时制时间。
@:显示24小时制时间。
u:显示当前用户名。
v:显示Bash的版本信息。
w:显示当前所在目录的完整信息。
#:执行的第几个命令。
$:提示符,root用户会显示提示符为"#",如果普通用户会显示提示符为" $"。
#修改PS1变量[root@localhost ~]# PS1='[u@h WA]$ '[root@localhost ~21:43]#
当然,这样修改只是暂时的,如果要长久修改需要修改配置文件/etc/bashrc。
LANG语系变量LANG变量支持当前终端使用的语言。
[root@localhost ~]# locale -a #查看当前Linux支持的语系CC.utf8POSIXzh_CNzh_CN.gb18030zh_CN.gbk......[root@localhost ~]# echo $LANG #查看终端当前使用的语系zh_CN.UTF-8
位置参数变量注:"$(())"代表数值运算。
$n
#! /bin/bash#加法运算count.sha=$1 #$1代表命令后输入的第1个变量b=$2 #$2代表命令后输入的第2个变量sum=$(($a+$b)) #"$(())中代表数值运算"echo $sumecho $0 #$0输出命令本身
程序运行:
[root@localhost ~]# ./count.sh 159 8791038./count.sh
$、 $@与 $#
#!/bin/bash#验证$*、 $@与 $#的作用echo "$* is $* "echo "$@ is $@ "echo "$# is $# "
程序运行:
[root@localhost ~]# ./para.sh 11 22 33 44$* is 11 22 33 44 #将输入的所有参数视为一个整体输出$@ is 11 22 33 44 #将输入的参数分开列出$# is 4 #计数总共输入了多少个参数
利用for循环观察$@与 $*的区别:
#!/bin/bashfor i in "$*" do echo $i doneecho "========================================="for y in "$@" do echo $y done
程序运行:
[root@localhost sh]# ./para2.sh 98 75 2198 75 21=========================================987521
预定义变量$?:最后一次执行的命令的返回状态,如果上一条命令正确执行,返回值为0,如果没有正确执行,则返回值为非0。$$:当前进程的进程号(PID)。$!:后台运行的最后一个进程的进程号(PID)。
例:$?用法
[root@localhost sh]# lscount.sh for.sh hello.sh para2.sh para.sh[root@localhost sh]# echo $?0[root@localhost sh]# la-bash: la: 未找到命令[root@localhost sh]# echo $? #找不到命令时的返回值127
read—接受键盘输入 read命令可以在屏幕输出提示并读取输入的内容。
命令格式:
[root@localhost ~]# read 选项 变量名
选项:
-p “提示信息”:在等待read输入时,输出提示信息。-t:秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间。-n:字符数:read命令只接受指定的字符数,就会执行。-s:隐藏输入的数据。
变量名:
变量名可以自定义,如果不能指定变量名,会把输入保存入默认变量REPLY。
如果只提供了一个变量名,则整个输入行赋予该变量。
如果提供了一个以上变量名,则输入行分为若干字,一个接一个的赋予各个变量。
用Shell程序来实验read的功能:
#!/bin/bash#用read输入来实现加法计算read -t 30 -p "please input num1:" num1read -t 30 -p "please input num2:" num2sum=$(($num1+$num2))echo $sum
程序运行:
[root@localhost sh]# ./sum2.sh please input num1:78please input num2:96174
declare声明变量类型 使用declare命令可以声明变量的类型。
命令格式:
[root@localhost ~]# declare [-/+] 选项 变量名
选项:
-:给变量设定类型属性。+:取消变阿玲的类型属性。-a:将年两声明为数组型。-i:将变阿玲声明为整数型。-r:将变量声明为只读变量,注意,一旦声明为只读变量,既不能修改变量的值,也不能删除变量,甚至不能通过+r取消变量的只读属性。-x:将变量声明为环境变量。-p:显示指定变量的被声明的类型。
例:利用declare命令声明整型变量
[root@localhost ~]# num1=12[root@localhost ~]# num2=23[root@localhost ~]# declare -i sum=$num1+$num2[root@localhost ~]# echo $sum35
ps:尚硅谷linux视频课程学习笔记