shell编程之BASH变量(2)
变量命名规范
在bash中,变量的默认类型都是字符串型,定义 name = 'kk'
变量分类
- 用户自定义变量。变量自定义的
- 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
- 位置参数变量:这种变量主要是用来向脚本当中传递参数或者数据的,变量名不能自定义,变量作用是固定的
- 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
变量调用
echo $变量名
例如
echo $x
echo $name
变量叠加
x = 123
x = "$x"456
x = ${x}789
变量查看
set
设置环境变量
export 变量名 = 变量值
或
变量名 = 变量名
export 变量名
常用环境变量
bash-4.1$ env
HOSTNAME=iZ2zebwk59ftsrtzd05mpzZ 主机名
SHELL=/bin/bash 当前的shell
TERM=xterm 终端环境
HISTSIZE=1000 历史命令条数
SSH_CLIENT=114.247.188.89 14320 60022 当前操作环境使用ssh连接的,这里记录客户端ip
OLDPWD=/home/chenjinxin
SSH_TTY=/dev/pts/0 ssh连接的终端是pts/1
USER=program 当前登录的用户
PATH环境变量
PATH变量:系统查找命令的路径
bash-4.1$ echo $PATH
/usr/local/server/node/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/chenjinxin/bin
echo $PATH
#查看PATH环境变量
PATH = "$PATH":/root/sh
#临时添加PATH变量的值
PS1环境变量
PS1变量:命令提示符设置
当前语系查询
locale
查询当前系统语系
bash-4.1$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIF
语系变量LANG
echo $LANG
查看系统当前语系
bash-4.1$ echo $LANG
en_US.UTF-8
locale -a | more
查看linux支持的所有语系
查看系统默认语系
cat /etc/sysconfig/i18n
bash-4.1$ cat /etc/sysconfig/i18n
LANG=en_US.UTF-8
SYSFONT=latarcyrheb-sun16
位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如$ |
$* | 代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 代表命令行中所有参数的个数 |
例子1
#!/bin/bash
num1 = $1
num2 = $2
sum = $(($num1+$num2))
echo $sum
$*和$@的区别
#!/bin/bash
for i in "$*"
#$*中的所有参数看成一个整体,所以这个for循环只会循环一次
do
echo "$i"
done
for y in "$@"
#$@中的每个参数都看成是独立的,所以中几个参数,就会循环几次
do
echo "$y"
echo "\n"
done
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确 |
$$ | 当前进程的进程好(PID) |
$! | 后台运行的最后一个进程的进程好(PID) |
接受键盘输入
read [选项][变量名]
- -p "提示信息": 在等待read输入时,输出提示信息
- -t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
- -n 字符数: read命令只接受指定的字符数,就会执行
- -s 隐藏输入的数据,适用于机密信息的输入
#!/bin/bash
read -p "Enter your name : " name
echo "Hi, $name. Let us be friends!"
#!/bin/bash
read -t 10 -p "Enter the Internet domain name (e.g. nixcraft.com) : "
domain_name
whois $domain_name
#!/bin/bash
read -s -p "Enter Password : " my_password
echo
echo "Your password - $my_password"