您的位置:首页 > 运维架构 > Shell

学习笔记(9)——shellscript

2015-12-26 10:01 218 查看
  注意事项:

(1)命令的执行是从上至下,从左到右地进行分析与执行的。

(2)命令的执行过程中,命令、参数间的多个空白都会被忽略掉。

(3)空白行同样被忽略掉,并且【tab】键所得的空白同样被市委空格键。

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

(5)如果一行的内容太多了,可以使用“\【Enter】”来扩展至下一行。

(6)#号可作为批注。任何加在#号后面的内容都被作为批注文字被忽略。

  ShellScript中的第一行通常为 #!/bin/bash 用来声明script使用的shell名称。一般我们使用的是bash的语法,所有使用上述声明。当该程序执行时,它可以自动加载bash的相关环境配置文件。除第一行声明外,其他的注释都只用#即可,不用加“!”。

  在script的开始部分,务必将一些重要的环境变量设置好,至少设置PATH和LANG。

  script的执行方式:source script、sh script和./script

source script:将本文件在父进程中执行,即在原本的bash中执行。(比如更改配置文件后一般用source这个命令使之生效)(注意“exit 0”的使用

sh script:该脚本文件会在一个新的bash环境中执行,即子进程。当子进程结束后,子进程中的各项变量或操作将会结束,不会传回到父进程中。

./script:与sh类似,也是在一个新的bash中执行脚本,但与sh有所区别。

  在使用sh时,可以使用调试功能:

sh -n:不执行脚本,仅仅查询语法问题。

sh -v:执行前将内容输出到屏幕上。

sh -x:逐条输出,类似debug。

默认变量:

  在执行脚本时。脚本名称(带绝对路径)默认为变量:$0;执行时脚本名之后带的每个参数默认为变量:$1,$2,$3,……,$n。

  “$@”表示“$1”、“$2”、“$3”、……、“$n”,每个变量都是独立的。注意是不包含$0。

  “$#”表示参数的个数。

  使用“shift n”命令来使默认变量偏移。n表示偏移的个数,如果缺省默认为1。所谓偏移是指:讲除$0外的变量向前移动,相当与删除前n个变量。

  如:./test.sh para1 para2 para3 para4 para5 则$1=para1 $2=para2 $3=para3 $4=para4 $5=para5;如果在test.sh中使用了shift 2后,对应关系变为:$1=para3 $2=para4 $3=para5。

  script的编写需要掌握bash中的相关命令以及正则表达式。

1.交互式脚本文件的产生一般利用read命令:read -p "输入提示" 变量名 需要用户按照提示进行输入,并将输入信息保存在变量中。配合正则表达式可严格控制用户的输入

2.输出信息可使用echo或echo -e来讲结果输出到屏幕上。如果使用sh的执行方式,-e会被输出。

3.判断式的使用:

(1)test命令,接合||(或)和&&(且)使用

(2)判断符号:"[ ]"。判断式中,该判断符号的两端要加空格。

   注意:中括号中,每个组件都需要空格来分隔;变量和常量最好用双引号引起来;

文件类型:

  -e:该文件名是否存在。如 test -e file

  -f:该文件名是否存在且为文件。

  -d:该文件名是否存在且为目录。

  -r:该文件名是否存在且具有可读权限。

  -w:该文件名是否存在且具有可写权限。

  -x:该文件名是否存在且具有可执行权限。

  -s:该文件名是否存在且为“非空白文件”。

整数类型:

  -eq:两数值相等。

  -ne:两数值不相等。

  -gt:n1>n2

  -lt:n1<n2

  -ge:n1>=n2

  -le:n1<=n2

字符串类型;

  test -z string:判断字符串是否为空字符串。若是返回true。

  test -n string:判断字符串是否为非空字符串。若是返回true。(与-z相反)

  test string1=string2:判断两字符串是否相等,若相等,返回true。

  test string1 !=string2:判断两字符串是否相等,若不相等,返回true。

多重判断条件:

  -a :两个条件同时成立,返回true。(相当于&&)如 test -x file -a -r file 或 [ -x file -a -r file ] 或 [ -x file ] && [ -r file ]

  -o :任何一个条件成立,返回true。(相当于||)

  !:反向状态。(放在其它参数之前)如 test ! -x file

(3)条件判断式:

①if then格式:

  if [条件判断式]; then

    条件成立时执行的内容。

  fi

②if elseif格式:

  if [条件判断式1]; then

    条件1成立时执行的内容。

  elif [条件判断式2]; then

    条件2成立时执行的内容。

  else

    条件1和条件2都不成立时执行的内容。

  fi

③case...esac格式:
  case 变量名 in

    "变量内容1")

      变量内容符合“变量内容1”时执行的内容。

    ;;

    "变量内容2")

      变量内容符合“变量内容2”时执行的内容。

    ;;

    *)

      变量内容不符合“变量内容1”和“变量内容2”时执行的内容。

    ;;

  esac

4.函数(function)的使用

  格式:

  function fname(){

    程序段

  }

5.循环:

(1)while do done:当条件不成立时,停止循环

  格式:

  while [条件]

  do

    循环内容

  done

(2)until do done:当条件成立时,停止循环

  格式:

  until [条件]

  do

    循环内容

  done

(3)for do done

  格式1:在循环内容中,var的值依次为:con1 con2 con3...(这部分可以是数组类型的变量,在循环时,依次取数组中的一个元素值)

  for var in con1 con2 con3...

  do

    循环内容

  done

  格式2:数制处理(与C语言等类似)

  for ((初始值;限制值;执行补偿))

  do

    循环内容

  done

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: