Bash变量与变量分类
变量命名规则
- 变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线组成
- 变量名的长度不得超过255个字符
- 变量名在有效的范围内必须是唯一的
在Bash中,变量的默认类型都是字符串型
变量按照存储数据分类
- 字符串型
- 整型
- 浮点型
日期型
shell变量分类
- 用户自定义变量:变量是自定义的
- 环境变量:这种变量中主要保存的是系统操作环境相关的数据 变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
- 位置参数变量:这种变量主要用来向脚本当中传递参数或数据的, 变量名不能自定义,变量作用是固定的
- 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
Bash变量--用户自定义变量
变量定义变量名=变量值 # 等号左右不能有空格如 name=tom变量调用echo $变量名变量叠加x=123x="$x"456x=${x}789变量查看set 选项: -u 如果设置此选项,调用未声明变量时会报错(默认无任何提示)变量删除unset 变量名 如:unset name
Bash变量 -- 环境变量
环境变量与用户自定义变量的区别 用户自定义变量只在当前的shell中生效 环境变量在当前shell和这个shell的所有子shell中生效功能说明:以树状图显示程序。语 法:pstree [-acGhlnpuUV][-H <程序识别码> ][ <程序识别码> / <用户名称> 参 数:-a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示。-c 不使用精简标示法。-G 使用VT100终端机的列绘图字符。-h 列出树状图时,特别标明现在执行的程序。-H <程序识别码> 此参数的效果和指定"-h"参数类似,但特别标明指定的程序。-l 采用长列格式显示树状图。-n 用程序识别码排序。预设是以程序名称来排序。-p 显示程序识别码。-u 显示用户名称。-U 使用UTF-8列绘图字符。-V 显示版本信息。补充说明:pstree指令用ASCII字符显示树状结构,清楚地表达程序间的相互关系。如果不指定程序识别码或用户名称,则会把系统启动时的第一个程 序视为基层,并显示之后的所有程序。若指定用户名称,便会以隶属该用户的第一个程序当作基层,然后显示该用户的所有程序。设置环境变量export 变量名=变量值或变量名=变量值export 变量名查看环境变量set #查看所有环境变量env #查看环境变量调用变量echo $变量名 # 如 echo $name删除变量unset 变量名 # 如 unset name 程序识别码> 用户名称> 程序识别码> 程序识别码>
PATH环境变量
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用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”
bash语序变量
locale# 查询当前系统语序变量locale -a #查看所有语系locale -a | moreLANG 定义系统主语序的变量LC_ALL 定义整体语序的变量echo $LANG #查看当前语系变量 echo $LC_ALL #查看整体语序的变量cat /etc/sysconfig/i18n #查询系统默认语系cat /etc/default/locale #ubuntu系统下默认语言的文件linux中文支持前提条件,正确安装的中文字体和中文语系: 如果有图形界面,可以正确支持中文显示 如果使用第三方远程工具,只要语系设置正确,可以支持中文显示 如果使用纯字符界面,必须使用第三方插件(如zhcon等)
位置参数变量
$n:n为数字,$0代表命令本身,$1-$9代表第一道第九个参数, 十个以上的参数需要用大括号包含,如${10}$*:这个变量代表命令行中所有的参数,$*把所有参数看出一个整体$@:这个变量也是代表命令行中所有参数,不过$@把每个参数区分对待$#:这个变量代表命令行中所有参数的个数
#!/bin/bash #加减乘除 (+-*/) x1=$1 operator=$2 x2=$3 echo "x1" $operator "x2 = " $(($x1 $operator $x2))
#!/bin/bash for i in "$*" #$*中所有参数看成一个整体,所以for循环只执行一次 do echo "The parameters is: $i" done for y in "$@" #$@中的每个参数是独立的,因此“$@”中有几个参数,就会执行几次 do echo "Parameter:$y" done echo $#
预定义变量
$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行; 如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。$$:当前进程的进程号(PID)$!:后台运行的最后一个进程的进程号(PID)
echo $$ #返回当前进程号 7588 ps aux | grep 7588
#!/bin/bash echo "current PID: $$" find / -name hello.sh & #&为放入后台 echo "backgroud: $!"
接受键盘输入read [选项] [变量名]选项: -p:“提示信息”:在等待read输入时,输出提示符信息 -t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间 -n 字符个数:read命令只接受指定的字符数,就会执行 -s:隐藏输入的数据,适用于机密信息的输入
#!/bin/bash read -p "please input your name: " -t 30 name echo -e "\n$name" read -p "please input your passwd: " -s passwd echo -e "\n$name" read -p "please input your angend [M/F]: " -n 1 sex echo $sex