变量查看

[root@localhost ~]$ set [选项]
选项:
-u:如果设定此选项,调用未声明变量时会报错(默认无任何提示)
-x:如果设定此选项,在命令执行之前,会把命令先输出一次
+<参数> :取消某个set曾启动的参数。

[root@localhost ~]$ set
BASH=/bin/bash
…省略部分输出…
name='shen chao'
#直接使用set 命令,会查询系统中所有的变量,包含用户自定义变量和环境变量

[root@localhost ~]$ set -u
[root@localhost ~]$ echo $file
-bash: file: unbound variable
#当设置了-u选项后,如果调用没有设定的变量会有报错。默认是没有任何输出的。

[root@localhost ~]$ set -x
[root@localhost ~]$ ls
+ls --color=auto
anaconda-ks.cfginstall.loginstall.log.syslog sh tdir testtestfile
#如果设定了-x选项,会在每个命令执行之前,先把命令输出一次

[root@localhost ~]$ set +x
#取消启动的x参数

变量删除

[root@localhost ~]$ unset 变量名

环境变量查询和删除

env命令和set命令的区别:

set命令可以查看所有变量,而env命令只能查看环境变量。

[root@localhost ~]$ unset gender   #删除环境变量gender
[root@localhost ~]$ env | grep gender

位置参数变量

位置参数变量 作用
$n n为数字,0表示当前shell脚本程序的名称,1-9代表第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10}
$* 这个变量代表命令行中所有的参数,$把所有的参数看成一个整体
¥@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
$0 获取shell脚本的名称 执行如果带全路径 则$0带全路径
$ 获取脚本的pid的进程号
$! 获取上一个在后台运行脚本的pid号

接受键盘输入:read命令

[root@localhost ~]$ read [选项][变量名]
选项:
    -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
    -p: “提示信息”:在等待read输入时,输出提示信息
    -t: 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
    -n: 数字:read命令只接受指定的字符数,就会执行
    -s: 隐藏输入的数据,适用于机密信息的输入
  -d: 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
  -e: 在输入的时候可以使用命令补全功能。
变量名:
变量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY.
如果只提供了一个变量名,则整个输入行赋予该变量.
如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有字

写个例子来解释下read命令:

[root@localhost sh]$ vi read.sh
#!/bin/bash

read -t 30 -p "Please input your name: " name
#提示“请输入姓名”并等待30 秒,把用户的输入保存入变量name 中
echo "Name is $name"
#看看变量“$name”中是否保存了你的输入

read -s -t 30 -p "Please enter your age: " age
#提示“请输入年龄”并等待30秒,把用户的输入保存入变量age中
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo -e "\n"
#调整输出格式,如果不输出换行,一会的年龄输出不会换行
echo "Age is $age"

read -n 1 -t 30 -p "Please select your gender[M/F]:" gender
#提示“请选择性别”并等待30秒,把用户的输入保存入变量gender
#使用“-n1”选项只接收一个输入字符就会执行(都不用输入回车)
echo -e "\n"
echo "Sex is $gender"

默认变量取值

1. a如果没有定义,则表达式返回默认值,否则返回a的值;
${a-defaultvalue}
例子:
a=""
ret1=${a-"/usr/local"}
echo "ret1:" $ret1
和
ret1=${a-"/usr/local"}
echo "ret1:" $ret1

2. a没有定义或者为空字符串,则表达式返回默认值,否则返回a的值;
${a:-defaultvalue}

调用变量

尽量加{}

例如:${a}

results matching ""

    No results matching ""