}}
Shell变量名使用的特殊字符
$# 传送给命令Shell的参数序号
$- 在Shell启动或使用set命令时提供选项
$? 上一条命令执行后返回的值
$$ 当前shell的进程号
$! 上一个子进程的进程号
$@ 所有的参数,每个都用双括号括起
$* 所有参数,用双括号括起
$n 位置参数值,n表示位置
当前shell名
echo "$HOME $PATH"
结果显示$/u/ice_walk/bin:/etc:/usr/bin
而
echo '$HOME $PATH' 结果显示$HOME $PATH
shell的逃逸符是一个"\",表示其后的字符不具有特殊的含义或不是shell的函数
echo $HOME $PATH
结果显$$HOME /bin:/etc:/usr/bin:
可以用变量和其他字符组成新的字,例如:
SUN=sun
echo $day
sunday
用户也可以在命令行上同时对多个变量赋值,赋值语句之间用空格分开:
X=x Y=y
注意变量赋值是从右到左进行的
}}}
expr命令将把一个算术表达式作为参数,通常形式如下:
expr [数字] [操作符] [数字]
由于Shell是按字符形式存储变量的,所以用户必须保证参加算术运算的操作数必须为数值。下面是有效的算术操作符:
+ 两个整数相加
- 第一个数减去第二个数
* 两整数相乘
/ 第一个整数除以第二个整数
% 两整数相除,取余数
用户不能单纯使用"*"做乘法,若输入:
$expr 4*5
系统将会报错,因为Shell看到"*"将会首先进行文件名替换。正确形式为:
$expr 4 \* 5
结果显示:20
{{{{shell样例 注意:}}}}
#!/bin/bash
flag=1
top=10000
date >>/backup1/time.txt
while [ $flag -lt $top ] -lt是小于 注意 需要用[ ],且注意 [后 和]后,都有空格
do
cd /backup1/check
dd if=/dev/zero of=test_$flag.txt bs=1024 count=2000000
rm -f test_$flag.txt
flag=`expr $flag + 1` 注意 左边 需要用flag而不是$flag表示 给变量值,特别注意是=号,前后 不能有空格,而且 expr $flag + 1 需要用执行符``包括
done
}}}}}
echo命令可以使用一些特殊的逃逸字符进行格式化输出,下面是这些字符及其含义:
\b Backspace
\c 显示后不换行
\f 在终端上屏幕的开始处显示
\n 换行
\r 回车
\t 制表符
\v 垂直制表符
\ 反斜框
nnn 用1,2或3位8进制整数表示一个ASCII码字符
echo -en $"\t\tPress 'I' to enter interactive startup."
-e表示 允许\有新的意义
-n表示 不换行 如果 和 “”内的参数 有冲突,以“”内为准
}}
测试字符串间的关系
有关串的操作符如下:
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
if [ -z "$IN_INITLOG" ]; 字符使用时 用""
有关文件的测试
使用test进行的第三类测试是测试文件的状态,用户可以测试文件是否存在,是否可写以及其他文件属性。下面是文件测试时使用的选项。注意只有文件存在时,才有可能为真。
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
复杂的条件测试(and 、or 、not)
-a 与
-o 或
! 非
就是组合条件了,任何高级语言中都有的(NOT 、AND 、OR),例如:
$test -r em.null -a -s em.null
$echo $?
结果显示:1
说明了em.null并不是可读并且非空的文件
测试两个整数之间关系
test命令与expr命令一样,也可以把字符转变成整数,然后对其操作。test命令对两个数进行比较,使用的操作符如下:
int1 -eq int2 两数相等为真 equal (eq)
int1 -ne int2 两数不等为真 not equal (ne)
int1 -gt int2 int1大于int2为真 great (gt)
int1 -ge int2 int1大于等于int2为真 great equal (ge)
int1 -lt int2 int1小于int2为真 less than (lt)
int1 -le int2 int1小于等于int2为真 less than equal (le)
本阶段 小程序:
使用while循环使程序执行一次可以备份多个用户指定的目录。代码如下:
echo "欢迎使用备份小程序"
ANS=Y
while [ $ANS = Y -o $ANS = y ]
do
echo _
#读目录名
echo "输入要备份的目录名:\c"
read DIR
if [ ! -d $DIR ]
then
echo "$DIR不是一个目录!"
exit 1
fi
cd $DIR
echo "请选择:"
echo _
echo "1 恢复数据到 $DIR"
echo "2 备份$DIR的数据"
echo
echo "请选择:\c"
read CHOICE
case "$CHOICE" in
1) echo "恢复中… …"
cpio -i 2) echo "备份中… …"
cpio -o >/dev/rmt0;;
*) echo "选择无效"
esac
if [ $? -ne 0 ]
then
echo "cpio执行过程中出现问题"
exit 2
fi
echo "继续别的目录吗?(Y/y)\c"
read ANS
done
2。
if [ $# -eq 0 ]
then
echo "Usage:x_shift2.sh 参数"
exit 1
fi
3。
I=1
while [ $I -lt 10 ]
do
{
echo "$I\c"
I=`expr $I + 1`
if [ $I -eq 3 ]
then
continue
fi
if [ $I -eq 7 ]
then
break
fi
}
done