Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48395
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-08 12:36
文章分类

全部博文(11)

文章存档

2014年(3)

2013年(8)

我的朋友

分类: LINUX

2013-05-14 23:25:36


一、Shell的默认变量:
 1)$#:传入脚本的命令行的参数个数
 2)$*:所有命令行参数值,在各个参数值之间留有空格
 3)$0:命令本身(shell文件名)
 4)$1:第一个命令行参数
 5)$2:第二个命令行参数
 5) $n:第n个命令行参数
 例如: #!/bin/sh
  echo '$* = ’ $*
  echo '$# = ’ $#
  echo '$0 = ’ $0
  echo '$1 = ’ $1
  echo '$2 = ’ $2
  echo '$3 = ’ $3
  echo '$4 = ’ $4
 执行这个脚本:在命令行输入 ./ssh 2 3 4 txt
 运行结果: $* = 2 3 4 txt
   $# = 4
   $0 = ./ssh
   $1 = 2
   $2 = 3
   $3 = 4
   $4 = txt
 注:单引号、双引号和反引号在脚本中的区别:
  单引号(‘’)用于保持在引号内的每个字符的字面值。
  双引号保持引号内的所有字符的字面值,除了$,``,\
  反引号(``)数字键1左边的那个:反引号内作为一个系统命令并执行(作为shell命令被执行)

例如:1)单引号会屏蔽 $ 的取值功能。# echo '$PATH'$PATH
        2)双引号则不会。# echo "$PATH"/etc
        3)倒引号表示优先执行。下例即是先执行echo命令,然后将结果赋值myPath#myPath=`echo

$PATH`# echo $myPath/etc否则# myPath=echo $PATH这样会报错,因为shell命令解析 

是根据空格“分割重组”的。先分割成myPath=echo和$PATH,然后做变量替换,$PATH被 

替换为/etc,最后重组变成:myPath=echo /etc。显然/etc不是一个命令,因此会报错
二、条件测试test与[ ]:
 可以用test或者[]测试一个条件是否成立,如果测试结果为真,则该命令推出状态为0,为假,状态为1.
 格式:test option file 或者 [ option file ]
  -b file 块文件
  -c file 字符文件
  -d file  目录
  -e file 存在
  -p file 管道
  -s file  大于0
  -r file  可读
  -w file 可写
  -x file 可执行
  -a 逻辑与,操作符两边都为真,结果为真,否则为假。
  -o 逻辑或,操作符两边有一边为真,结果为真,否则为假。
  ! 逻辑否,条件为假,结果为真,条件为真,结果为假。
 例如:1)判断/bin/下是否存在ls 和 lv
   #!/bin/sh
   [ -e /bin/lv ] && echo yes || echo no
   test -e /bin/ls  && echo YES || echo NO
  运行结果:no
     YES
       2) #!/bin/sh
   #判断/bin/ls 是否存在 与 /bin/ls 是否可执行
   [ -e /bin/ls -a -x /bin/ls ] && echo yes || echo no
   #判断/bin/ls是否是目录 或 /bin/ha 是否存在
   test -d /bin/ls -o  -e /bin/ha && echo YES || echo NO
  运行结果:yes
     NO
三、if 语句判断语句:
  1)但分支:if [ expression ]      或者  if [ expression ];then
          then                          #code block
       #code block  fi
          fi
  例如: #!/bin/sh
   if [ '3' -eq '3' ]
   then
           echo yes
   fi

运行结果:yes
  注: 相同  -eq 
   不同  -ne 
   大于  -gt 
   小于  -lt 
   大于或等于  -ge
   小于或等于  -le
   为空  -z 
   不为空  -n
  2)双分支: if [ expression ]
        then
        #code block
         else
        #code block
         fi 
  3)多分支: if [ expression ]     或   if [ expression ]
        then    then
        #code block   #code block
        else if [ expression ]  elif [ expression ]
     then     #code block
     #code block  elif [ expression ]
     else     then
     #code block   #code block
      fi   else
        fi     #code block
   例如:1)#!/bin/sh   fi
    read tmp
    if [ "$tmp" -eq '2' ]
    then
            echo "tmp is 2"
    else if [ "$tmp" -eq '3' ]
           then
            echo "tmp is 3"
    else
            echo ha
            fi
    fi
   运行结果 在执行脚本是输入在键盘上输入一个数字 
   注:read 是读入
         2)#!/bin/sh
    read T
    if [ "$T" -lt "10" ] ;then
            echo " T < 10"
    elif [ "$T" -le "20" -a "$T" -ge "10" ] ;then
    #[]中应该使用-a -o 而不是使用&& ||
            echo " T >= 10 && T <= 20 "
    elif [ "$T" -ge '20' ]
    then
            echo " T > 20"
    else
            echo haha
    fi
   运行结果:自己验证!!

 

 

阅读(1292) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~