什么是变量?
变量是计算机内存的单元,其中存放的值可以改变,方便程序调用
变量命名规则:
- 变量名必须以字母或下划线打头,名字中间只能由字母,数据和下划线组成
- 变量名的长度不得超过255个字符
- 变量名在有效的范围内必须是唯一的
- 在bash中,变量的默认类型都是字符串型
变量按照存储数据分类
- 字符串型
- 整型
- 浮点型
- 日期型
变量的分类
- 用户自定义变量。变量自定义
- 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
- 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
- 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
自定义变量
定义变量
变量名=变量值 注意:等号两侧不能有等号
变量名=“hello world” #注意字符串中有空格需要用双/单引号
变量调用:
echo $变量名
eg: echo $name
变量叠加:
x1=123
y1=234
将x1和y1的值叠加赋值给z1
方法一:z1="$x1""$y1"
方法二:z1=${x1}${y1}
变量查看
- set 可以查看系统所有变量以及对应的变量值
-选项:
-u 如果设定此选项,调用未声明变量时会报错(默认无任何提示)
变量删除
unset 变量名
eg: unset x
环境变量
环境变量与用户自定义变量的区别?
环境变量是全局变量,用户自定义变量是局部变量;(用户自定义变量只在当前的shell中生效,环境变量在当前shell和这个shell的所有子shell中生效)
定义环境变量
- export 变量名=变量值
或
变量名=变量值
export 变量名
查看环境变量
set #查看所有变量
env #查看环境变量
调用环境变量
echo $变量名
删除环境变量
unset 变量名
注意:删除环境变量需要在父shell下才能删除,查看进程树命令(pstree),退出当前shell用命令exit
系统中常用环境变量
HOSTNAME: 主机名
SHELL : 当前的shell
TERM :终端环境
HISTSIZE :历史命令条数
SSH_CLIENT :当前操作环境是用SSH连接的,这里记录客户端ip
SSH_TTY :ssh连接的终端时pts/1
user :当前登录的用户
PATH环境变量 :系统查找命令的路径
echo $PATH #查看PATH环境变量
PATH = "$PATH":/root/sh #添加PATH变量的值
PS1环境变量
- ps1变量:命令提示符设置
- \d :显示日期,格式为“星期 月 日”
- \H:显示完整的主机名。如默认主机名 “localhost.localdomain”
- \t :显示24小时值时间,格式为 “HH:MM:SS”
- \A :显示24小时制时间,格式“HH:MM”
- \u: 显示当前用户名
- \w 显示当前所在目录的完整名称
- \W 显示当前所在目录的最后一个目录
- \$:提示符如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”
当前语系查询
locale #查询当前系统语系
- LANG: 定义系统主语系的变量
- LC_ALL :定义整体语系的变量
语系变量LANG
echo $LANG #查看系统当前语系
locale -a |more #查看linux支持的所有语系
查询系统默认语系 cat /etc/sysconfig/i18n 下此开机后默认语系
预定义变量
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
$$ 当前shell脚本运行的当前进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
位置参数变量:
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有的参数的个数
eg:
vi weizhicanshu.sh
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2)) #变量sum的和是num1加num2
echo $sum
运行脚本
sh weizhixingcanshu.sh $1 $2
$*与$@的区别
#!/bin/bash
for i in "$*" #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo "The parameter is : $i"
done
for y in "$@" #$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo "parameter : $y"
done
注意:$@和$*都应该用“”括起来
接收键盘输入
read [选项]【变量名】
选项:
- -p "提示信息" :在等待read输入时,输出提示信息
- -t time :read命令一直等待用户输入,使用此选项可以指定等待时间
- -n 字符数 :read命令只接受指定的字符数,就会执行
- -s :隐藏输入的数据,适用于机密信息的输入(比如:密码)