Linux学习(八):shell脚本编程

1、shell编程基础

shell脚本的本质:shell命令的有序集合
shell脚本编程的3个步骤:
1、建立shell文件
2、赋予shell脚本文件执行权限
3、执行shell 文件

2、变量

Shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、浮点型),将任何赋给变量的值都解释为一串字符。
shell有如下4种变量
1、用户自定义变量
2、位置变量
3、预定义变量
4、环境变量

2.1 用户自定义变量

在shell编程中通常使用全大写变量,方便识别 。注意=左右没有空格
 COUNT=1
变量的调用:在变量前加$ 
echo $HOME

2.2 位置变量

$0   与键入的命令行一样,包含脚本文件名
$1,$2,……$9 分别包含第一个到第九个命令行参数
${10}~${n}: 存放第十个到第n个命令行参数。

2.3 预定义变量

$#  包含命令行参数的个数
$@ 包含所有命令行参数:“$1,$2,……$9”
$?   包含前一个命令的退出状态,0正常,1错误
$*   包含所有命令行参数:“$1,$2,……$9”
$$   包含正在执行进程的ID号

范例


打印执行文件和第一个参数,然后执行ld命令(错误命令),打印上一个命令的执行结果
运行该shell脚本

输出了执行文件和第一个参数,ld执行结果为1

2.4 环境变量


HOME: /etc/passwd文件中列出的用户主目录

IFS:Internal Field Separator, 默认为空格,tab及换行符

 

PATH :shell搜索路径

PS1PS2:默认提示符($)及换行提示符(>)

TERM:终端类型,常用的有vt100,ansi,vt200,xterm等 

3 shell程序和语句

         shell 程序由零或多条shell语句构成。 shell语句包括三类:说明性语句、功能性语句和结构性语句。

说明性语句

         以#号开始到该行结束,不被解释执行

功能性语句:

         任意的shell命令、用户程序或其它shell程序。

结构性语句

         条件测试语句、多路分支语句、循环语句、循环控制语句等。       

      3.1 说明性语句

说明性语句也就是注释,shell中以#代表注释。在shell文件的第一行为固定格式,告诉系统当前的shell
#!/bin/shell类型
范例
#!/bin/bash

3.2 功能性语句

(1)read

     read从标准输入读入一行, 并赋值给后面的变量,其语法为:

  .   read  var

     把读入的数据全部赋给var

  .   read  var1 var2  var3

     把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2, ……把其余所有的词赋给最后一个变量.

      如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行


(2)运算符
算术运算命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和求模(%)等操作。例如:


反撇号代表引用命令的结果。
运行结果



(3)测试test

test语句可测试三种对象:

          字符串     整数    文件属性

每种测试对象都有若干测试操作符

例如:

      test "$answer"  =  "yes"

      变量answer的值是否为字符串yes

      test  $num –eq  18

      变量num的值是否为整数18

      test  -d  tmp   

      测试tmp是否为一个目录名

字符串测试

s1 = s2 测试两个字符串的内容是否完全一样


s1 != s2 测试两个字符串的内容是否有差异


-z s1 测试s1 字符串的长度是否为0


-n s1 测试s1 字符串的长度是否不为0

整数测试

a -eq b   测试a 与b 是否相等

a -ne b  测试a 与b 是否不相等

a -gt b   测试a 是否大于b

a -ge b   测试a 是否大于等于b

a -lt b   测试a 是否小于b

a -le b   测试a 是否小于等于b

文件测试
-d name       测试name 是否为一个目录
-f name   测试name 是否为普通文件
-L name  测试name 是否为符号链接
-r name   测试name 文件是否存在且为可读
-w name   测试name 文件是否存在且为可写
-x name   测试name 文件是否存在且为可执行
-s name   测试name 文件是否存在且其长度不为0
f1 -nt f2   测试文件f1 是否比文件f2 更新
f1 -ot f2   测试文件f1 是否比文件f2 更旧

3.3 控制语句

        结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。

        主要包括:条件测试语句(两路分支)、多路分支语句、循环语句、循环控制语句和后台执行语句等。


(1)if语句
if…then…fi
语法结构:
         if    表达式
          then  命令表
         fi     
      如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。 
      if和fi是条件语句的语句括号, 必须成对使用;
      命令表中的命令可以是一条, 也可以是若干条。


if…then…else…fi
语法结构为:
        if      表达式
        then 命令表1
        else  命令表2
        fi
如果表达式为真, 则执行命令表1中的命令, 再退出if
语句; 否则执行命令表2中的语句, 再退出if语句.
范例

测试1.zip是否是一个目录(当然不是啦)

(2)多路分支语句

多路分支语句case用于多重条件测试, 语法结构清晰自然其语法为:

范例:测试第一个参数输入值

运行结果




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值