shell脚本部分命令用法

来源:互联网 发布:tf卡数据修复软件 编辑:程序博客网 时间:2024/06/18 08:32

1、 if用法:

格式:

if  [ 条件 ];then

      Command

      Command

      .......

else

      Command

      Command

      ......
fi            

  

 条件表达式:


  • 文件表达式
if [ -f  file ]    如果文件存在
if [ -d ...   ]    如果目录存在
if [ -s file  ]    如果文件存在且非空 
if [ -r file  ]    如果文件存在且可读
if [ -w file  ]    如果文件存在且可写
if [ -x file  ]    如果文件存在且可执行   

  • 整数变量表达式
if [ int1 -eq int2 ]    如果int1等于int2   
if [ int1 -ne int2 ]    如果不等于    
if [ int1 -ge int2 ]       如果>=
if [ int1 -gt int2 ]       如果>
if [ int1 -le int2 ]       如果<=
if [ int1 -lt int2 ]       如果<
   
  •    字符串变量表达式
If  [ $a = $b ]                 如果string1等于string2
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空
if  [ $sting ]                  如果string 非空,返回0 (和-n类似)    

shell 编程中使用到得if语句内判断参数

–b 当file存在并且是块文件时返回真

-c 当file存在并且是字符文件时返回真

-d 当pathname存在并且是一个目录时返回真

-e 当pathname指定的文件或目录存在时返回真

-f 当file存在并且是正规文件时返回真

-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真

-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效

-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真

-p 当file存在并且是命令管道时返回为真

-r 当由pathname指定的文件或目录存在并且可读时返回为真

-s 当file存在文件大小大于0时返回真

-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真

-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。

-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。 



2、exec 作用(内置命令):

       shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行

        因此,如果你在一个shell里面,执行exec ls那么,当列出了当前目录后,这个shell就自己退出了,因为这个shell进程已被替换为仅仅执行ls命令的一个进程,执行结束自然也

就退出了。为了避免这个影响我们的使用,一般将exec命令放到一个shell脚本里面,用主脚本调用这个脚本,调用点处可以用bash a.sh,(a.sh就是存放该命令的脚本),这样会

a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。  


3、关于循环命令:

 (1)until 命令:

       until do done:就是说当条件成立时,就停止循环,否则就一直循环下去。

      与它相反的“while do done ”当条件成立时,就进行循环,否则就停止循环。


    until do done 语法:

  until [ 条件 ]

  do

    程序段

  done


 (2)for 命令

     “for in do done ”当条件成立时,就进行循环,否则就停止循环


        for in do done 语法

            for arg  in  "$@"

                do

                       echo $arg

            done


 (3)while 命令

      “while do done ”当条件成立时,就进行循环,否则就停止循环。


      while do done 语法

     while command1

     do

              command

             command

              ……

     done


4、Shift的用法:

       位置参数可以用 shift 命令左移

       比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。 


      Shift 命令还有另外一个重要用途, Bash 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。

   Shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。


eg:

# t_shift.sh 测试shift命令

#!/bin/bash
until [ $# -eq 0 ]
do
echo "第一个参数为:$1,此时共有参数个数: $#"
shift 2
done

$ ./shift.sh 1 2 3 4 5 6

结果:

第一个参数为:1,此时共有参数个数:6
第一个参数为:3,此时共有参数个数:4
第一个参数为:5,此时共有参数个数:2

注: $#表示提供给脚本的参数数量(即 表示此脚本当前有几个变量);若有4个变量,执行 shift 2 后,前2个变量 $1, $2丢弃, $3 --> $1、 $4 --> $2

         $* 表示所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2

         $@  表示所有这些参数都分别被双引号引住,若一个脚本接收到两个参数,$@等价于$1$2

举例说:       脚本名称叫test.sh 入参三个: 1 2 3       运行test.sh 1 2 3后       $* 为 "1 2 3"(一起被引号包住)       $@ 为 "1" "2" "3"(分别被包住)       $# 为 3(参数数量)


5、exit

       在脚本里面有exit 0 ,exti 1则当运行到这个地方的时候就跳出脚本,不在运行下面的脚本。

      通常,exit  0 表示成功, exit  1表示失败 







  

0 0
原创粉丝点击