Linux shell 脚本编程

Shell脚本概述

 Shell脚本是利用shell的功能所写的一个程序。这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能( . sh后缀)

第一个Shell脚本文件

执行方式

bash test.sh

source test.sh

./test.sh

 脚本变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。

变量可以通过变量名访问。在指令式语言中,变量通常是可变的

变量的作用

用来存放系统和用户需要使用的特定参数(值)

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

变量命名要求

命名规则

1、区分大小写

2、不能使用程序内保留字和内置变量。如:for 、if

3、只能使用数字、字母及下划线,切不能数字开头

4、使用英文尽量使词义通俗易懂。

变量的分类

自定义变量:有用户自己定义、修改和使用

特殊变量:1、环境变量:用于系统维护,用于设置工作环境

                  2、只读变量:用于变量值不允许被修改的情况

                  3、位置变量:通过命令行给脚本程序传递参数

                  4、预定义变量:bash中内置的一类变量,不能直接修改

用户自定义变量

在shell编程中通常用全大写变量,方便识别

COUNT=1

变量调用:在变量前面加$

echo  $COUNT 

取消赋值

unset   COUNT 

用户自定义变量----取值

双引号:允许通过$符号引用其他变量值

       弱引用,其中的变量引用会被替换为变量值

单引号:禁止引用其他变量值,$视为普通字符

        强引用,其中的变量引用不会被替换为变量值,而保持源字符串

反撇号(esc下面键~):命令替换,提取命令执行后的输出结果,``和$(…)作用相同

用户自定义---数组

echo $a:默认显示数组a的第一个元素

echo ${a[0]}:显示数组中第一个元素,以此类推

echo ${a[-1]}:显示数组中最后一个元素echo ${a[*]} 和echo ${a[@]}:显示数组中所有元素

echo ${#a[@]}:显示数组中元素的个数

echo ${a[@]:起始元素id:元素个数]}:显示数组中以起始元素为首的指定个数的元素(注意:这里起始元素id不能为负值

unset a[n] 删除数组中的第n个元素

unset a 删除a这个数组

只读变量  readonly

变量值不允许修改(重新赋值)的情况

无法使用unset删除

最快方法重启

位置变量和预定义变量

$0   与键入的命令行一样,包含脚本文件名

$1,$2,……$9 ${10}    分别包含第一个到第十个命令行参数

$#  包含命令行参数的个数

$@  包含所有命令行参数:“$1,$2,……$9”

$*  包含所有命令行参数,是一个整体:“$1,$2,……$9”

$?  包含前一个命令的退出状态

$$  包含正在执行进程的ID号

环境变量

常用环境变量

$USER表示用户名称

$HOME表示用户的宿主目录

$LANG表示语言和字符集

$PWD表示当前所在工作目录

$PATH表示可执行用户程序的默认路径

export可以将变量指定为全局变量

Shell程序

Shell 程序由零或多条shell语句构成。shell语句包括三类:

说明性语句

功能性语句

结构性语句。

说明性语句(注释行)

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

功能性语句(命令)

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

read  var

把读入的数据全部赋给var

read  var1 var2 var3

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

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

read -p +提示语  : 指定输入提示字符串

read  -t  +限制时间   : 指定输入时间

例 : read  -t  3 -p  "please "  val1  val2    :3秒内输入

read  -s   :输入不显示

算术运算命令expr

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

$ expr12 + 5 \* 3

27

$ expr 3 - 8 / 2

-1

$ num=9

$ sum=`expr $num \* 6

`$ echo $sum

54

test语句

可测试三种对象:字符串  整数  文件属性 

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

字符串测试

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

文件测试

-e name   测试一个文件是否存在

-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更旧

结构性语句

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

主要包括:

              •条件测试语句(两路分支)•多路分支语句•循环语句•循环控制语句等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咋吃都不胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值