shell基础

发表于:2007-05-26来源:作者:点击数: 标签:
}} Shell变量名使用的特殊字符 $# 传送给命令Shell的参数序号 $- 在Shell启动或使用set命令时提供选项 $? 上一条命令执行后返回的值 $$ 当前shell的进程号 $! 上一个子进程的进程号 $@ 所有的参数,每个都用双括号括起 $* 所有参数,用双括号括起 $n 位置参

}}

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

原文转自:http://www.ltesting.net