Shell基础(二)Bash变量

Bash变量

变量定义规则

  • 变量名称可以由字母、数字、下划线组成,但是不能以数字开头,如果变量名是"2name",则是错误的。
  • 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
  • 变量用等号连接值,等号左右两侧不能有空格。
  • 变量的值如果有空格,需要用单引号或双引号,这里要注意双引号中"$"""反引号有特殊含义,单引号中括起来的内容都是普通字符。
  • 在变量的的之中,可以用""转义符。
  • 如果需要增加变量的值,那么可以进行变量值得叠加,不过变量需要用双引号包含"$ 变量名"或用${变量名}包含变量名。
    例:
[root@localhost ~]# test=456
[root@localhost ~]# test=123"$test"
[root@localhost ~]# echo $test
123456
[root@localhost ~]# test=${test}789
[root@localhost ~]# echo $test
123456789
  • 需要把命令的结果赋予变量时,需要使用反引号或"$()"将命令括起来。
  • 环境变量名建议大写,好区分。

变量的分类

  • 用户自定义变量:这种变量是最常见的变量,有用户自由定义变量名和变量的值。
  • 环境变量:这种变量主要保存的是和系统操作环境中相关的数据,分为用户自定义环境变量和系统自带环境变量,用户自定义环境变量可以自定义变量名和变量的作用以及变量值,系统自带环境变量变量名是固定的,变量作用也是固定的。
  • 位置参数变量:这种变量主要就是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  • 预定义变量:是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 HOST
HOSTNAME=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 \W\A]\$ '
[root@localhost ~21:43]#

当然,这样修改只是暂时的,如果要长久修改需要修改配置文件/etc/bashrc。

LANG语系变量

LANG变量支持当前终端使用的语言。

[root@localhost ~]# locale -a    #查看当前Linux支持的语系
C
C.utf8
POSIX
zh_CN
zh_CN.gb18030
zh_CN.gbk
......
[root@localhost ~]# echo $LANG   #查看终端当前使用的语系
zh_CN.UTF-8

位置参数变量

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

注:"$(())"代表数值运算。

  • $n
#! /bin/bash
#加法运算count.sh
a=$1   #$1代表命令后输入的第1个变量
b=$2   #$2代表命令后输入的第2个变量

sum=$(($a+$b))   #"$(())中代表数值运算"

echo $sum

echo $0  #$0输出命令本身

程序运行:

[root@localhost ~]# ./count.sh 159 879
1038
./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/bash

for i in "$*"
        do  
                echo $i
        done

echo "========================================="

for y in "$@"
        do  
                echo $y
        done

程序运行:

[root@localhost sh]# ./para2.sh 98 75 21
98 75 21
=========================================
98
75
21

预定义变量

  • $?:最后一次执行的命令的返回状态,如果上一条命令正确执行,返回值为0,如果没有正确执行,则返回值为非0。
  • $$:当前进程的进程号(PID)。
  • $!:后台运行的最后一个进程的进程号(PID)。

例:$?用法

[root@localhost sh]# ls
count.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:" num1
read -t 30 -p "please input num2:" num2

sum=$(($num1+$num2))

echo $sum

程序运行:

[root@localhost sh]# ./sum2.sh 
please input num1:78
please input num2:96
174

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 $sum
35

ps:尚硅谷linux视频课程学习笔记

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值