一、shell script的编写与执行

   1、shell script 的编写中还需要用到下面的注意事项:

    a、命令的执行是从上到下,从左到右地分析与执行

    b、命令、参数间的多个空白都会被忽略掉

    c、空白行也将被忽略掉, 并且[tab]按键所得的空白同样视为空格键

     d、如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令

    e、至于如果一行的内容太多,则可以使用“\[Enter]”来扩展至下一行

     f、"#"可作为批注。

   2、执行文件(/home/sam/shell.sh)

    1、直接命令执行: shell.sh文件必须要具备可读与可执行(rx)的权限,然后:

      绝对路径: 使用/home/sam/shell.sh来执行

      相对路径: 假设工作目录为/home/sam/ , 则使用./shell.sh

      变量“PATH”功能: 将shell.sh放在PATH指定的目录内, 例如:~/bin/

    2、以bash进程来执行:通过“bash shell.sh”或“sh shell.sh”来执行

  3、script的执行方式的区别(source, sh script, ./script)

    1、利用直接执行的方式来执行script:

      不论是绝对路径/相对路径还是$PATH内, 或者是利用bash(或sh)来执行脚本时,该script都会使用一个新的bash环境来执行(子进程)

    2、利用source来执行脚本: 在父进程中执行

二、善用判断式

  1、 利用test命令的测试功能

    如:test -e /sam && echo "exist" || echo "Not exist"

  

  2、利用判断符号[]

    如: [-z "$HOME"] ; echo $?

    注意:

      a、在括号[]内每个组件度需要有空格键来分隔;

      b、在中括号内的变量,最好都以双引号括起来;

      c、在中括号内的常量, 最好都以单或双引号括起来。

  3、shell script 的默认变量($0 $1 ...)

    $0: 执行的脚本文件名

      $1,$2,...: 第1,2,...个参数

    $#: 代表后接的参数“个数”

    $@: 代表“$1”、“$2”、“$3”之意,每个变量是独立的(用双引号括起来)

    $*: 代表"$1c$2c$3c$4",其中c为分隔字符, 默认为空格键

    shift: 造成参数变量号码偏移

      shift 会移动变量, 而且shift后面可以接数字, 代表拿掉最前面的几个参数的意思。

三、 条件判断式

   1、利用 if...then

     单层:

        if [条件判断式]; then

            逻辑

        fi <--if语句结束语

     多重:

        if [条件判断式]; then

           逻辑

        elif [条件判断式]; then

          逻辑

        else 

          逻辑

        fi

    2、利用case...esac判断

      case $变量名称 in

        "第一个变量内容" )

          程序段

          ;;

        "第二个变量内容")

          程序段

          ;;

         *)

          exit 1

          ;;

      esac

    3 、利用function功能

      function fname(){

        程序段

      }

 四、循环(loop)

    1、while do done, until do done(不定循环)

      while [ condition ]

      do

        程序段落

      done

        ----------》当condition条件成立时,就进行循环

       until [ condition ]

       do

         程序段落

       done

       -----------》当condition条件成立时,就终止循环

    2、for ... do...done(固定循环)

        for var in con1 con2 con3...

        do

          程序段落

        done

    3、for ...do ...done的数值处理

      for((初始值; 限制值; 执行步长))

       do

        程序段

      done

五、shell script的追踪与调试

   sh [-nvx] scripts.sh

    -n : 不要执行script 仅查询语法的问题

    -v: 在执行script前, 先将script的内容输出到屏幕上

    -x: 将使用到的script内容显示到屏幕上

 

   

shell script的更多相关文章

  1. shell及脚本4——shell script

    一.格式 1.1 开头 必须以 "# !/bin/bash"  开头,告诉系统这是一个bash shell脚本.注意#与!中间有空格. 二.语法 2.1 数值运算 可以用decla ...

  2. (copy) Shell Script to Check Linux System Health

    source: http://linoxide.com/linux-shell-script/shell-script-check-linux-system-health/ This article ...

  3. shell script练习

    执行脚本的几种方式: 1. sh a.sh 或者  bash a.sh  调用的是 /bin/bash 进程执行的,所以脚本不需要执行权限. 2. 直接使用绝对路径执行, /home/script/a ...

  4. 这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script

    这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4378224.html ...

  5. CentOS Linux下一个tomcat起停,查看日志的shell script

    CentOS 的tomcat安装目录:/usr/local/tomcat vi MyTomcatUitl.sh          创建文件chmod u+x MyTomcatUtil.sh   赋执行 ...

  6. Shell script for logging cpu and memory usage of a Linux process

    Shell script for logging cpu and memory usage of a Linux process http://www.unix.com/shell-programmi ...

  7. shell script入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  8. shell script 的追踪与 debug

    shell script 的追踪与 debug scripts 在运行之前,最怕的就是出现语法错误的问题了!那么我们如何 debug 呢?有没有办法不需要透过直接运行该 scripts 就可以来判断是 ...

  9. 第十三章、学习 Shell Scripts 简单的 shell script 练习

    简单的 shell script 练习 简单范例 对谈式脚本:变量内容由使用者决定 [root@www scripts]# vi sh02.sh #!/bin/bash # Program: # Us ...

随机推荐

  1. 分享一些DICOM数据下载网站

    医院的DICOM数据轻易不让拷出来,所以这里列出一些医学数据,但不局限于DICOM数据网址,供大家下载. 斯坦福大学体数据库(RAW DATA) http://graphics.stanford.ed ...

  2. 适配布局-ios

    // 系统的约束代码 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIView *superVi ...

  3. iredmail安装脚本分析(三)---conf/global DISTRO值的来源及操作系统的判断

    作者在引入conf/global 文件时,就已经对操作系统的类型进行判断,同时也对DISTRO进行了赋值. 部分代码,如图: 显然文件里的KERNEL_NAME的值就是判断完成的操作系统,具体分析该值 ...

  4. Day23_IO第五天

    1.递归求5的阶乘 package com.heima.chario; public class Demo8_Digui { /** * @param args * 递归:方法自己调用自己 * 5! ...

  5. Some thing about Graph

    Learning CNNs for Arbitrary Graphs (Graph-like data): Learning Convolutional Neural Networks for Gra ...

  6. 解决Cannot delete or update a parent row: a foreign key constraint fails (`current_source_products`.`product_storage`, CONSTRAINT `product_storage_ibfk_3` FOREIGN KEY (`InOperatorID`)

    出现这个异常的原因是因为设置了外键,造成无法更新或删除数据. 1.通过设置FOREIGN_KEY_CHECKS变量来避免这种情况 删除前设置 SET FOREIGN_KEY_CHECKS=0; 删除完 ...

  7. 随机生成UUID(GUID)的方法

    - (NSString *)UUID { CFUUIDRef uuid_ref = CFUUIDCreate(NULL); CFStringRef uuid_string_ref= CFUUIDCre ...

  8. li标签的点击范围

    <div class="login_menu_choose"> <ul class="cursor">                & ...

  9. TOJ1334

                                                                   1334: Oil Deposits 时间限制(普通/Java):1000 ...

  10. java的VO和PO的用途

    最近在搞一个项目,用到了 springMVC,加深了我对VO和PO的理解,有感而发. 1 写在之前的提示 VO == Value Object PO == Persistant Object VO对应 ...