shell 1变量注意点

定义变量时,变量名不加美元符号($),如:

variableName="value"

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用;unset 命令不能删除只读变量。

特殊变量列表
变量含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

$* 和 $@ 的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

 脚本实例:

#!/bin/sh
echo "$*=$*"
echo "$@=$@"
echo "参数数量$#=$#"
for i in "$*"
do
echo ${i}
done
for j in "$@"
do
echo ${j}
done
运行 后边加上参数 ds ss sasa ss sssdd 结果:
$*=ds ss sasa ss sssdd
$@=ds ss sasa ss sssdd
参数数量$#=5
ds ss sasa ss sssdd
ds
ss
asa
ss

可以使用的变量替换形式:
形式说明
${var} 变量本来的值
${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

请看下面的例子:
#!/bin/bash
#如果没有设置则  提示 不给该变量赋值
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"
#如果没有设置则  提示 给该变量赋值
echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
#如果设置则  提示 不给该变量赋值
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"
#如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

for语句:
#!/bin/sh
for i in c++ java c# mysql
do
    echo "I am good at ${i} Language"
done
原文地址:https://www.cnblogs.com/timelesszhuang/p/5027782.html