3.6 Linux shell脚本编程(概念、变量、语句)

目录

shell脚本概述

shell脚本编写步骤

第一个shell脚本文件

shell脚本变量

变量的介绍

变量的作用

变量的命名要求

变量的分类

用户自定义变量

取值

用户自定义变量-数组

只读变量

位置变量与预定义变量

环境变量

shell语句

shell程序

说明性语句(注释行)

功能性语句(命令)

结构性语句


shell脚本概述

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

 后缀是.sh

shell脚本编写步骤

需求分析

命令测试

脚本编写

测试调优

第一个shell脚本文件

三种执行方式        

bash test.sh        

source  test.sh        

./test.sh     //这种方式报错大概率是因为权限不够,chmod 0777 test.sh 给文件最高权限

shell脚本不用编译,是一个解释性的语言

shell脚本变量

变量的介绍

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

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

变量的作用

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

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

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

变量的命名要求

变量的分类

用户自定义变量

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

$ COUNT=1

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

$ echo $COUNT

Linux Shell/bash从右向左赋值

Y=y

X=$Y

echo $X

y

使用unset命令删除变量的赋值

Z=hello

echo $Z

hello

unset Z

echo $Z

等号前后不能加空格

打印 echo

释放 unset

取值

双引号: 允许通过$符号引用其他变量值 弱引用,其中的变量引用会被替换为变量值

单引号: 禁止引用其他变量值,$视为普通字符 强引用,其中的变量引用不会被替换为变量值,而保持源字符串

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

#!/bin/bash 
#变量

COUNT=3
echo $COUNT 
#''和""
echo '$COUNT'
echo "$COUNT"
A=echo COUNT
#这种情况无法赋值
A='echo $COUNT'
A=$(echo $COUNT)
#这两种方式等价都可以
unset COUNT
echo $COUNT

用户自定义变量-数组

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这个数组

#!/bin/bash 
a=(1 2 3 4 5 6 7 8 9)
echo $a
#默认打印第一个数组
echo ${a[*]}
echo ${a[@]}
#打印整个数组,两种方式效果相同
echo ${#a[*]}
#取数组元素的个数
echo ${a[2]}
#取数组中某一个元素
a[2]=9
echo ${a[2]}
#数组单个赋值
unset a[2]
echo ${a[*]}
#删除数组中某个元素
echo ${a[@]:1:3}
#从下标1打印三个元素
unset a
#删除整个数组

只读变量

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

无法使用 unset删除  最快方法重启  

在变量名前写readonly

位置变量与预定义变量

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

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

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

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

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

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

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

环境变量

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

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

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

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

shell语句

shell程序

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

说明性语句(注释行)

 以#号开始到该行结束,不被解释执行 注释行可以出现在程序中的任何位置,既可以单独占用一行,  也可以接在执行语句的后面. 以#号开始到所在行的行尾部分,都不被解释执行. 例如:

#! /bin/sh

#

# 本程序说明

#

command_1

command_2                  # command_2的语句说明

……

# 下面程序段的说明

command_m

……

command_n                  # command_n语句的说明

……

功能性语句(命令)

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

       read  var

     把读入的数据全部赋给var

       read  var1  var2  var3

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

-t 几秒自动结束语句

-f 输入提示语句

-s 输入不回显   

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

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

$ expr  12  +  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 -geb         测试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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值