shell编程(一)--常用变量及表达式

时间:2022-05-10 11:08:41

$? 表示执行上一个命令的返回值:如果为0表示执行成功,非0表示执行失败
$1、$2、。。。 分别表示参数1、参数2、。。。
$# 表示这个程序的参数个数
$*/$@ 表示这个程序的所有参数
$$ 表示这个程序的PID
$! 表示执行上一个后台命令的PID
$_ 表示这个变量保存之前执行的命令的最后一个参数的值

执行脚本时加-x可以显示脚本的执行过程
如 sh -x stats.rd.task.sh

不执行脚本,只是检查语法的模式,将返回所有语法错误
如 sh -n stats.rd.task.sh

命令替换符``

case结构与C/C++中的switch结构是相同的. 它允许通过判断来选择代码块中多条路
径中的一条. 它的作用和多个if/then/else语句的作用相同, 是它们的简化结构, 特别适用于创
建菜单.
case "$variable" in
$condition1" )
TT class="REPLACEABLE" >command...
;
$condition2" )
TT class="REPLACEABLE" >command...
;
esac
1、对变量使用""并不是强制的, 因为不会发生单词分割
2、每句测试行, 都以右小括号)来结尾
3、每个条件判断语句块都以一对分号结尾;
4、case块以esac (case的反向拼写)结尾

expr
通用求值表达式: 通过给定的操作(参数必须以空格分开)连接参数, 并对参数求值. 可以是算术操作, 比较操作, 字符串操作或者是逻辑操作.
expr 3 + 5
#返回8
y=`expr $y + 1`
增加变量的值, 与let y=y+1和y=$(($y+1))的效果相同. 这是使用算术表达式的一个例子.
z=`expr substr $string $position $length`
在位置$position上提取$length长度的子串.

while
这种结构在循环的开头判断条件是否满足, 如果条件一直满足, 那么就一直循环下去 (返回0作为退出状态码). 与for循环的区别是, while循环更适合在循环次数未知的情况下使用.
while [ "$var0" -lt "$LIMIT" ]
do
echo -n "$var0 " # -n 将会阻止产生新行.
# ^ 空格, 数字之间的分隔.

var0=`expr $var0 + 1` # var0=$(($var0+1)) 也可以.
# var0=$((var0 + 1)) 也可以.
# let "var0 += 1" 也可以.
done # 使用其他的方法也行.

2>&1
将错误消息的输出(2), 发送到与标准输出($1)所指向的地方.

/dev/null
把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.
cat $filename >/dev/null
# 文件内容丢失,而不会输出到标准输出.
rm $badname 2>/dev/null
# 这样错误信息[标准错误]就被丢到太平洋去了