---------------------------------------------------------------------------------
变量是计算机内存的单元,其中存放的值可以改变。变量用于暂时保存信息。
一. 变量设置规则
1.数字,字母,下划线组成,不能以数字开头。
2.Bash中变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
3.变量用等号连接值,等号左右不能有空格。
4.变量的值如果有空格,需要使用单引号或双引号包括,因为空格代表分割符。
name="chen wei"
5.在变量的值中,可以使用"\"转义符。
6.如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含"$变量名" 或 ${变量名} 包含。
7.如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
name=`ls` 或 name=$(ls)
echo $name
8.环境变量名建议大写,便于区分。
二. 变量分类
1. 用户自定义变量(也叫本地变量):只在当前的shell中生效。
2. 环境变量:变量中保存的是和系统操作环境相关的数据。(值无法更改,可以新建)
环境变量会在当前shell和这个shell的所有子shell当中生效,如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。
3. 位置参数变量:用来向脚本当中传递参数或数据,变量名不能自定义,变量作用是固定的。(名称不能自定义,不能新建,只能改值)
4. 预定义变量:Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。(名称不能自定义,不能新建,只能改值)
【1】本地变量
name=chenwei # 变量赋值
echo $name # 变量调用(chenwei)
name="$name"is # 变量叠加
echo $name # 变量调用(chenweiis)
name=${name}poet # 变量叠加
echo $name # 变量调用(chenweiispoet)
set # 查看所有变量
unset name # 变量删除
【2】环境变量
export name=farwish # 声明环境变量
env # 查询环境变量
unset name # 删除变量
系统常见环境变量:
PATH:冒号分割的路径(系统查找命令的路径),可以使用 echo $PATH 查看
( 系统命令之所以不需要指定路径,是因为系统会去 PATH 定义的路径里面顺序查找,找不到才会提示不存在. )
如果我们自己编写个脚本vim hello.sh; chmod 755 hello.sh; cp hello.sh /usr/local/bin;放入到$PATH中存在目录内,在任意位置输入hello.sh就可以执行了。(但是实际中不这样做,容易让人误解为是系统命令)
PATH="$PATH":/home/weichen/test # PATH变量叠加,把我们的脚本所在路径加进去(命令行修改只是临时生效,重启将失效)
PATH=$PATH:/home/weichen/test ( 环境变量也可以不加引号 )
PS1:定义系统提示符的变量
echo $PS1 # 输出为 [\u@\h \W]\$
PS1='\h:\W \u\$' # 设置成自定义的(仅临时生效)
\d :显示日期,格式为“星期 月 日”
\h :显示简写主机名。如默认主机名“localhost”
\t :显示24小时制时间,格式为“HH:MM:SS”
\T :显示12小时制时间,格式为“HH:MM:SS”
\A :显示24小时制时间,格式为“HH:MM”
\u :显示当前用户名
\w :显示当前所在目录的完整名称
\W :显示当前所在目录的最后一个目录
\# :执行的第几个命令
\$ :提示符,如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”
【3】位置参数变量
$n :n为数字,$0代表命令本身,$1-$9 代表第一个到第九个参数,十以上的参数需要用大括号包含,如 ${10} 、${11}
$* :这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体(如果循环 $* 输出参数,将只输出一次)
$@ :这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待(如果循环 $@ 输出参数,将单独输出每个参数)
$# :这个变量代表命令行中所有参数的个数
#!/bin/bash
# 注释:pam.sh
echo $0
echo $1
echo $2
echo $
echo $*
echo $@
echo $#
chmod 755 pam.sh
./pam.sh abc def hhh
# 输出:
./pam.sh
abc
def
hhh
abc def hhh
abc def hhh
3
位置参数使用:
#!/bin/bash
# 注释:使用位置参数变量进行数值运算 num1=$
num2=$
sum=$(( $sum1 + $sum2 )) # 变量sum的和是num1+num2, $(( ))用于运算;
# 或者直接 sum=$(( $1 + $2 ))
echo $sum
【4】预定义变量:
$? :(echo $?)最后一次执行的命令返回的状态。值为0,证明上一个命令正确执行;如果非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。程序判断命令是否正确执行,只能依赖$?
$$ :当前进程的进程号(PID)
$! :后台运行的最后一个进程的进程号(PID)
#!/bin/bash echo "当前进程号$$" find /usr -name hello.sh & echo "后台运行的最后一个进程的进程号$!"
接收键盘输入:read [选项] [变量名]
选项:
-p "提示信息" : 在等待read输入时,输出提示信息
-t 秒数 : read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数 : read命名只接收指定的字符数就会执行
-s : 隐藏输入的数据,适用于机密的信息输入
-t 和 -p 是必须使用的,-n 和 -s 可选,比用位置参数变量更直观。
#!/bin/bash read -t -p 'please input your name: ' name
echo $name read -t -s -p 'please input your password: ' passwd
echo '\n'
echo $passwd read -t -n -p 'please select your sex [M/F]: ' sex
echo '\n'
echo $sex