当前位置:首页 > UNIX系统统指令查询手册
B SHELL语法? IF语句
grep用于查看Dave是否在数据文件data.file中,注意?Dave\\>‘用于精确匹配 if grep ‘Dave\\>‘ data.file > /dev/null 2>&1 then
echo \else
echo \fi
用if语句测试文件权限 LOGFILE=test.txt
if [! -w \
echo \fi
if语句可用来测试传入脚本中参数的个数。使用特定变量$#,表示调用参数的个数。 if [ $# -lt 3 ]; then
echo \ exit 1 fi
嵌套IF
DIR_NAME=testdirec THERE=`pwd`
mkdir $DIR_NAME > /dev/null 2>&1 if [ -d $DIR_NAME ]; then cd $DIR_NAME if [ $? = 0 ]; then HERE=`pwd`
cp $THERE/*.txt $HERE else
echo \ exit 1 fi else
echo \ exit 2 fi
多文件位置检测,演示elif用法
LOCAT_1=/usr/opts/audit/logs/audit.log LOCAT_2=/usr/local/audit/audit.logs if [ -r $LOCAT_1 ]; then echo \ cat $LOCAT_1 elif
[ -r $LOCAT_2 ] then
echo \ cat $LOCAT_2 else
echo \ exit 1 fi
CASE语句
echo -n \read ANS
case $ANS in
1) echo \ ;;
2) echo \ ;;
*) echo \ exit 1 ;; esac
echo -n \read ANS
case $ANS in
y|Y|yes|Yes) echo \ ;;
n|N) echo \ exit 0 ;;
*) echo \ exit 1 ;; esac FOR语句
打印字符串列表
for loop in \do
echo $loop done
for loop in `ls LPSO*` do
echo $loop
cat $files | tr \done
UNTIL语句
until循环做监视条件也很有用。假定要监视文件系统容量,当它达到一定水平时通知超级用户。 LOOK_OUT=`df | grep /logs | awk ‘{print $5}‘ | sed ‘s/%//g‘` echo $LOOK_OUT
until [ $LOOK_OUT\do
echo \ exit 0 done
WHILE语句
使用while循环读键盘输入 count=0
echo -n \while read FILM do
echo \ count=`expr $count+1` done
用while循环从文件中读取数据 while read LINE do
echo $LINE done < names.txt
使用IFS读文件
文件names.txt中内容如下:
Louise Conrad:Accounts:ACC8987 Peter James:Payroll:PR489 Fred Terms:Customer:CUS012 SAVEDIFS=$IFS IFS=:
while read NAME DEPT ID do
echo -e \done < name.txt IFS=$SAVEDIFS 输出结果如下:
Louise Conrad Accounts ACC8987 Peter James Payroll PR489 Fred Terms Customer CUS012 死循环,跳出需要break while: do 命令 done
函数定义和调用? 测试目录存在 is_it_a_directory() {
### 参数数量小于1 if [ $# -lt 1 ]; then
echo \ return 1 fi
### 判断是否是目录
_DIRECTORY_NAME=$1
if [ ! -d $_DIRECTORY_NAME ]; then return 1 else
return 0 fi }
echo -n \read DIREC
if is_it_a_directory $direct; then else
echo \fi
命令行参数控制? SHIFT命令
向脚本传递参数时,有时需要将每一个参数偏移以处理选项,这就是shift命令的功能。它每次将参数位置向左偏移一位。例如下面这个程序使用shift命令来处理传递到脚本的每一个参数,这样只需要打印$1变量就可以显示所有参数 while [ $# -ne 0 ] do
echo $1 shift done
GETOPTS命令
有时有必要在脚本中指定命令行选项取值。getopts为此提供了一种方式,即在option_string中将一个冒号放在选项后。例如:
getopt sahfvc: OPTION
上面一行脚本指出,选项a、h、f可以不加实际值进行传递,而选项c必须取值。使用选项取值时,必须使用变量OPTARG保存该值。如果试图不取值传递此选项,会返回一个错误信息。错误信息提示并不明确,因此可以用自己的反馈信息屏蔽它,方法如下:将冒号放在option_string开始部分。 while getopts :ahfc: OPTION while getopts :ahfc: OPTION do
case $OPTION in a) ALL=true
echo \ ;;
h) HELP=true
echo \ ;;
f) FILE=true
echo \ ;;
c) COPIES=$OPTARG
echo \ \\?) # usage statement
echo \ ;; esac done
命令行:getopt1 -ah –c 3
SHELL编写的自动FTP脚本,详见632 Linux 与Unix Shell 编程指南 第25和27章? ftp -i -n $DEST_HOST << FTPIT
user anonymous $USER@$THISHOST $MODE
get $FILENAME $DIREC/$FILENAME.ftp quit FTPIT
在SHELL中输出显示用echo,输入用read,子命令执行采用exec? #!/bin/sh
echo \read name
echo \read surname
采用trap在脚本中捕捉信号?
trap可以使你在脚本中捕捉信号。该命令的一般形式为: trap name signal(s)
其中,name是捕捉到信号以后所采取的一系列操作。实际生活中,name一般是一个专门用来处理所捕捉信号的函数。Name需要用双引号(―‖)引起来。Signal就是待捕捉的信号。
脚本在捕捉到一个信号以后,通常会采取某些行动。最常见的行动包括: 1)清除临时文件 2)忽略该信号
3)询问用户是否终止该脚本的运行
下表列出了一些最常见的trap命令用法:
trap \忽略信号2和信号3,用户不能终止该脚本
trap \如果捕捉到信号2或3,就执行相应的commands命令
共分享92篇相关文档