Linux学习(8)——Shell变量

目录

概述

Bash变量之什么是变量与变量分类

1、变量命名规则

2、变量按照存储数据分类

3、变量的分类

Bash变量之用户自定义变量

1、定义变量

2、变量调用

3、变量叠加

4、变量查看

5、删除变量

Bash变量之环境变量

1、设置环境变量

2、查看环境变量

3、删除环境变量

4、常用环境变量

5、PATH环境变量

6、PS1环境变量

Bash变量之语系变量

1、当前语系查询

2、语系变量LANG

3、查询系统默认语系

4、Linux中文支持

Bash变量之位置参数变量

1、位置参数变量

Bash变量之预定义变量

1、预定义变量

2、接收键盘输入


 

学习视频乃是慕课教程:https://www.imooc.com/learn/336

本节是学习所作笔记及总结。

 

概述

shell与其他语言对比:

  • PHP和Java主要实现功能

  • Shell简化管理操作

 

Bash变量之什么是变量与变量分类

变量:将一个值临时赋给某个变量,如X=2,name="张三",age=45,就可以通过变量name、age来获取它的值,并且可以对值进行修改。

1、变量命名规则

  • 变量名必须以字母或下划线开头,中间只能由字母、数字和下划线组成。

  • 变量名的长度不得超过255字符。

  • 变量名在有效范围内必须是唯一的,即在同一个范围内不能有两个同名的变量。

  • 在Bash中,变量的默认类型都是字符串型。

  • 在任何系统中,目录名、文件名、变量名都要是有意义的,如name、age而不是abc、xyz不明其意的。

2、变量按照存储数据分类

  • 字符串型,如info="hello world"

  • 整型,如num=12

  • 浮点型,就是小数,如num=12.5

  • 日期型

但在Bash中默认类型都是字符串型。

3、变量的分类

  • 用户自定义变量。变量是由用户自定义的。

  • 环境变量。这种变量中主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的。

  • 位置参数变量。其实就是预定义变量的一种,这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

  • 预定义变量。是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

 

Bash变量之用户自定义变量

  • 不能用数字作为变量名开头

  • 变量赋值时不能有空格

  • 变量值里有空格需要用单引号或双引号括起来

1、定义变量

变量名=变量值
	例如:
		x=34
		name="张三"

2、变量调用

echo $变量名
	例如:
		echo $x
		echo $name

注意输出的x的值其实是一个字符串,不能直接参与运算。如$x+$y会报错。

例1:$x+$y命令

3、变量叠加

x=123
x="$x"456
	输出:123456
x=123
x=${x}789
	输出:123789

4、变量查看

set
	选项:
		-u 如果设定此选项,调用未声明变量时会报错(默认无任何提示)

set能够查询到系统中所有正在运行的变量,除了系统默认已有的环境变量还有自己定义的变量。

例1:set命令,查看所有变量

例2:set -u命令,不存在的变量会报错。

5、删除变量

unset 变量名
	删除变量

例1:unset x命令,删除变量

 

Bash变量之环境变量

执行bash命令可以进入当前Shell的子Shell,用exit命令从子Shell退回到父Shell中,可以通过pstree命令查看。

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

  • 环境变量是全局变量,在子Shell中也可以调用

  • 用户自定义变量是局部变量

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

1、设置环境变量

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

例1:export e='环境变量'命令,设置环境变量。

使用set或者env命令查看设置的环境变量。

2、查看环境变量

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

例1:env命令,查看系统内的环境变量。

例2:bash命令,由于环境变量是全局变量,所以在子bash中也可以看到。

设置两个变量x和y,其中前者是普通变量,后者是环境变量,可以使用set命令进行查看。

都能够成功输出变量的值。

使用bash命令进入子Shell,再次使用set命令查看或者输出两个变量的值。

可以看到前者无值。

3、删除环境变量

unset 变量名
	删除环境变量

4、常用环境变量

  • HOSTNAME:主机名

  • SHELL:当前的shell

  • TERM:终端环境

  • HISTSIZE:历史命令

  • SSH_CLIENT:当前操作环境是用ssh连接的,这里记录客户端IP

  • SSH_TTY:ssh连接的终端时pts/1

  • USER:当前登录的用户

注意:建议将环境变量用大写字母表示,以区分普通变量。

例1:echo $SHELL命令,输出SHELL环境变量的值。

5、PATH环境变量

意思就是执行ls等系统命令,不需要敲入该命令的绝对路径就能执行,是因为去从PATH路径中找的。

可以通过echo $PATH命令查看PATH路径。

如果要将环境变量永久生效,需要将其写入到文件中。

PATH变量:系统查找命令的路径
echo $PATH
	查看PATH环境变量
PATH="$PATH":/root/sh
	增加PATH变量的值

例1:echo $PATH命令,查看PATH路径,其中各个路径通过冒号分隔。

例2:PATH="$PATH":/root/sh命令,添加PATH路径,其中"$PATH"指的是PATH变量的值,":"指的是用来分隔PATH路径的标志,"/root/sh"指的是要添加到PATH中的路径。

6、PS1环境变量

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

例1:echo $PS1命令,查看PS1环境变量的值

例2:PS1='[\u@\A \w]\$'命令,修改PS1环境变量的值

 

Bash变量之语系变量

即当前系统所使用的语言,如中文、英文等。

1、当前语系查询

locale
	查看当前系统语系
		LANG:定义系统主语系的变量
		LC_ALL:定义整体语系的变量

例1:locale命令,查看当前系统语系。

2、语系变量LANG

echo $LANG
	查看系统当前语系
locale -a | more
	查看Linux支持的所有语系

例1:echo $LANG命令,查看系统当前语系。

例2:locale -a | more命令,查看Linux支持的所有语系。

3、查询系统默认语系

cat /etc/sysconfig/i18n
	查询系统默认语系

其中echo $LANG是当前正在运行的环境的语系,而cat /etc/sysconfig/il8n是下次开机的语系。

例1:cat /etc/sysconfig/i18n命令,查看系统默认语系。

4、Linux中文支持

前提条件,正确安装的中文字体和中文语系。

什么情况下显示中文

  • 如果有图形界面,可以正确支持中文显示

  • 如果使用第三方远程工具,只要语系设定正确,可以支持中文显示,如XShell

  • 如果使用纯字符界面,就必须使用第三方插件(如zhcon等)

 

Bash变量之位置参数变量

1、位置参数变量

主要是向脚本中传递需要使用的参数值,缺陷是不适合面向第三方用户,因为除了脚本编写人员之外其他人不清楚里面需要传几个参数。

变量含义
$0当前脚本的文件名
$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#传递给脚本或函数的参数个数。
$*传递给脚本或函数的所有参数。
$@传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。

例1:$n,创建一个shell脚本,输入如下内容。

#!/bin/bash

#$0表示命令本身
order=$0
#$1表示输入的第一个参数
num1=$1
#$2表示输入的第二个参数
num2=$2

#打印
echo $order
echo $num1
echo $num2

运行脚本,打印结果如下:

例2:$*与$@

$*和$@命令必须被双引号("")引起来才有效。

如在运行test.sh 1 2 3后,"$*"为"1 2 3"(一起被引号包住),"$@"为"1" "2" "3"(分别被引号包住)

$*循环

#!/bin/bash

m=0
for i in $*
 do
  echo "参数$i"
  m=$(($m+1))
 done
echo "循环次数:$m"

"$*"循环

注意是用双引号引起的。

#!/bin/bash

m=0
for i in "$*"
 do
  echo "参数$i"
  m=$(($m+1))
 done
echo "循环次数:$m"

$@循环

#!/bin/bash

m=0
for i in $@
 do
  echo "参数$i"
  m=$(($m+1))
 done
echo "循环次数:$m"

"$@"循环

注意用双引号括起来的。

#!/bin/bash

m=0
for i in "$@"
 do
  echo "参数$i"
  m=$(($m+1))
 done
echo "循环次数:$m"

总结:$*、$@、"$@"都是循环n次,而"$*"是被当作一个字符串处理,只循环一次。

例3:$#

#!/bin/bash

echo "参数个数是:$#"

 

Bash变量之预定义变量

1、预定义变量

预定义变量作用
$?最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
$$当前进程的进程号(PID)
$!后台运行的最后一个进程的进程号(PID)

 

2、接收键盘输入

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

例1:read -p命令,打印提示信息。

#!/bin/bash

#read -p命令输出提示信息
read -p "请输入您的名字:" name
#打印变量的值
echo "$name,您好"

例2: read -t 20,后面的20表示20秒,单位是秒。如果20秒后用户不输入信息,会自动继续执行。

#!/bin/bash

#read -p命令输出提示信息,并且等待20秒
read -p "请输入您的名字:" -t 20  name
#打印变量的值
echo "$name,您好"

例3:read -n 1,表示允许输入几个字符,后面的1可以改为其他数字,1表示只允许输入一个字符。

#!/bin/bash

#read -p命令输出提示信息,并且等待20秒
read -p "请输入您的性别:" -t 20 -n 1 sex
#打印变量的值
echo -e "\n"
echo "$sex"

例4:read -s passwd,表示输入内容隐藏。

#!/bin/bash

#read -p命令输出提示信息,并且等待20秒
read -p "请输入您的密码:" -t 20 -n 6 -s passwd
#打印变量的值
echo -e "\n"
echo "密码:$passwd"

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值