十二12 发表于 2018-8-21 11:31:03

shell编程总结

  前言:
  问题一:什么是shell?
  答:从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修功课之一。
  目前最流行的Shell称为bash Shell,bash Shell脚本编程以其简洁、高效而著称,多年来成为Linux程序员和系统管理员解决实际问题的利器。
  问题二、为什么要使用shell脚本?
  答:使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象。之所以要使用shell脚本是基于:
  简单性:shell是一个高级语言,通过它,你可以简洁地表达复杂的操作。
  可移植性:使用POSIX所定义的功能,可以做到脚本无须修改就可以在不同的系统上执行。
  开发容易:可以在短时间内完成一个功能强大有好用的脚本。
  
  一、初识shell脚本编程
  利用vim文本编辑器编写Shell脚本的格式是固定的,如下:
  #!/bin/bash
  #This is a shell file
  echo "Hello World!"
  第一行一定要使用#!指明系统需要哪种shell解释用户的shell程序,如:#!/bin/sh,#!/bin/bash,#!/bin/csh,#!/bin/tcsh和#!/bin/ksh等。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。
  除首行外,以#开头的行就是注释行。
  后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。
  通常shell脚本多以.sh为后缀。
  执行shell的方式有两种:第一种是为shell脚本加上可执行权限并执行,第二种是通过bash命令执行shell脚本。
  二、shell的基本语法知识
  1、变量类别
  (1)本地变量:只对当前shell进程有效的变量;对其它shell进程无效,包当前shell进程的子进程;
  VAR_NAME=VALUE
  变量赋值:向变量的存储空间保存数据
  变量引用:${VAR_NAME}
  "":弱引用,里面的变量会被替换;
  '':强引用,里面的所有字符都是字面量,直接输出;
  (2)环境变量:对当前shell进程及其子shell有效,对其它的shell进程无效;
  定义:export VAR_NAME=VALUE
  导出:export VAR_NAME
  (当定义了一个本地变量,要在当前shell的子shell进程中使用,可用导出:               export VAR_NAME)
  撤消变量:unset VAR_NAME(可撤销本地变量和环境变量)
  设置只读变量:readonly VAR_NAME(标志变量为不可改变的,即只读变量)
  (3)局部变量:对shell脚本中某代码片断有效;通常用于函数本地;
  local VAR_NAME=VALUE(当函数调用结束,局部变量会随之消失。也能用unset 撤销局部变量。)
  (4)位置变量:
  $1, $2, ..., ${10}(当两位数或超过两位数时,最好用{}括起来)
  (5)特殊变量:
  $#:传递到脚本的参数个数
  $*:以一个单字符串显示所有向脚本传递的参数
  $$:脚本运行的当前进程ID号
  $!:后台运行的最后一个进程的进程ID号
  $@:与$*相同,但是使用时加引号,并在引号中返回每个参数
  $-:显示shell使用的当前选项,与set命令功能相同
  $?:显示最后命令的退出状态,0表示成功,其他任何值都表示有错误
  2、变量赋值
  变量=值
  任何变量无需事先声明,可直接使用
  值默认都是字符型
  例如:a=abc, b=3
  a=3(不能写成 a = 3 ,即中间不能有空格。因在bash中是基于命令行的,中间有空格,bash会把其后的 = 和 3 看做选项或参数)
  赋值:
  a=4
  增强型赋值:
  +=, -=, *=, /=, %=
  a=$[$a+1] 相当于 let a+=1(let a+=1相当于let a=$a+1)
  自加:var++, var--, ++var, --var
  3、算术运算
  (1)如何定义整型变量:
  let VAR_NAME=INTEGER_VALUE
  例如:let a=3
  declare -i VAR_NAME=INTEGER_VALUE
  例如:declare -i a=3
  注意:即使没有定义为整型变量,字符型的数字依然可以参与算术运算;bash会执行变量类型的隐式类型转换;
  (2)实现算术运算的方式:
  let VAR_NAME=ARITHMATIC_EXPRESSION
  ( 使用let进行算术运算,要使用结果,必须把运算结果存储在变量中,再去引用变量(不可用` `引用该命令的执行结果) )
  VAR_NAME=$
  (不是命令,而是表达式)
  VAR_NAME=$((EXPRESSION))
  (不是命令,而是表达式)
  VAR_NAME=$(expr $num1 + $num2)
  (使用expr进行算术运算,可用` `引用该命令的执行结果)
  (3)算术运算符:
  + :加
  - :减
  * :乘
  / :除
  %:取模,取余数
  **: 次方,如: 2**2
  4、条件测试
  命令执行成功与否即为条件测试
  test EXPR
  [ EXPR ]
  [[ EXPR ]]
  比较运算:
  >, =,       大于,例如[[ "$str1" > "$str2" ]]
  <      小于
  >=   大于等于
  
页: [1]
查看完整版本: shell编程总结