shell脚本编程

编程语言常识

编译器,解释器
 
编程语言:机器语言、汇编语言、高级语言
 
静态语言:编译型语言
     强类型(变量在使用前一定要先声明)
     事先转换成可执行格式
     C、C++、JAVA、C#
 
动态语言:解释型语言, on the fly
     弱类型
     边解释边执行
     PHP、SHELL、python、perl
 
面向过程:Shell, C
面向对象: JAVA, Python, perl, C++
 

shell编程基础

变量概念

变量:内存空间(当我们用变量名去引用这个变量时称为有命名的内存空间)
内存:编址的存储单元
变量类型作用:事先确定数据的存储格式和长度
  字符
  数值:整形,浮点型
  布尔型
 

bash变量

bash变量类型:

   环境变量
   本地变量(包含局部变量)
   位置变量
   特殊变量

环境变量

作用域:为当前shell进程及其子进程;

环境变量声明导出方法:(1)声明时直接导出:export VARNAME=VALUE
           (2)先声明后导出:VARNAME=VALUE
                      export VARNAME
 
注意:脚本在执行时会启动一个子shell进程;
     命令行中启动的脚本会继承当前shell环境变量;
     系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
 

本地变量

(set可省略) VARNAME=VALUE: 作用域为整个bash进程;

局部变量

local VARNAME=VALUE:作用域为当前代码段;

位置变量:用来引用脚本的参数

$1, $2, ...

特殊变量:用来保存某些特殊数据

$?: 上一个命令的执行状态返回值;

程序执行,可能有两类返回值:
   (1)程序执行结果
   (2)程序状态返回代码(0-255)
        0: 正确执行
        1-255:错误执行,1,2,127系统预留;

$#:参数的个数
$*: 参数列表
$@:参数列表

撤销环境变量或本地变量:

unset VARNAME

查看当shell中变量(包括环境变量和本地变量):

set

查看当前shell中的环境变量:

printenv
env
export

脚本

脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序

为了让计算机知道如何去解释脚本,脚本的第一行都要加上一个 shebang(魔数):#!/bin/bash

条件测试

条件测试类型:

   整数测试
   字符测试
   文件测试

条件测试的表达式:

   [ expression ] (命令测试法)
   [[ expression ]] (关键字测试法)
   test expression
 

整数测试:

   -eq: 测试两个整数是否相等;比如 [ $A -eq $B ]
   -ne: 测试两个整数是否不等;不等,为真;相等,为假;
   -gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
   -lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
   -ge: 大于或等于
   -le:小于或等于
 

文件测试: 

-e FILE:测试文件是否存在
-f FILE: 测试文件是否为普通文件
-d FILE: 测试指定路径是否为目录
-r FILE: 测试当前用户对指定文件是否有读取权限;
-w
-x
 

字符测试:

==:测试是否相等,相等为真,不等为假
!=: 测试是否不等,不等为真,等为假
>
<
(注意:上述符号两边要加空格)
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假
 

命令的间逻辑关系: 

逻辑与: &&
逻辑或: ||

非:!

if语句

if 判断条件

then

statement

else

ststement

fi

或者

if 判断条件;then

statement

else

ststement

fi

多分支的if语句:

if 判断条件1; then
  statement1
  ...
elif 判断条件2; then
  statement2
  ...
elif 判断条件3; then
  statement3
  ...
else
  statement4
  ...
fi

循环

for 循环

for 变量 in 列表; do
  循环体
done

例子:对1到100求和

#!/bin/bash
#
declare -i SUM=0

for I in {1..100}; do
  let SUM=$[$SUM+$I]
done

echo "The sum is: $SUM."

while

语法:
 while CONDITION; do
   statement
   ...
 done

 例子:对1到100求和

#!/bin/bash
declare -i I=1
declare -i SUM=0

while [ $I -le 100 ]; do
let SUM+=$I
let I++
done

echo $SUM

列表生成

(1){1..100}
(2)seq 起始数 步进长度 结束数

退出脚本

exit

exit n (n为退出状态码)

如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码;

测试脚本有没有语法错误

bash -n 脚本

单步执行:显示脚本执行的每个步骤

bash -x 脚本

 
 
原文地址:https://www.cnblogs.com/xumaomao/p/11901622.html