Shell脚本编程概述(一):算数运算和条件测试

一、shell脚本语言

1.编程语言的分类:

(1)根据运行方式

编译运行:源代码
--> 编译器 (编译)--> 程序文件;

解释运行:源代码
--> 运行时启动解释器,由解释器边解释边运行;

(2)根据其编程过程中功能的实现是调用库还是调用外部的程序文件:

shell脚本编程:利用系统上的命令及编程组件进行编程;

完整编程:利用库或编程组件进行编程;

(3)编程模型:

过程式编程语言:以指令为中心来组织代码,数据是服务于代码;

顺序执行、选择执行、循环执行;代表:C,bash

面向对象的编程语言:以数据为中心来组织代码,围绕数据来组织指令;

类(class):实例化对象,method;

代表:Java,
C++, Python

总结:shell脚本编程是过程式编程,解释运行,依赖于外部程序文件运行;

2.shell脚本格式和规范

(1)第一行,顶格:给出shebang,解释器路径

用于指明解释执行当前脚本的解释器程序文件

常见的解释器:

#!/bin/bash;#!/usr/bin/python;#!/usr/bin/perl

(2)注释信息:#

#description:;#version;#author;#date

(3)代码注释:

(4)缩进,适度添加空白行;

(5)txt格式文本文档

3.shell脚本本质:命令的堆积;

很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足

4.运行脚本方法

(1)赋予执行权限,并直接运行此程序文件;

1)chmod
+x /PATH/TO/SCRIPT_FILE

(此处直接+x是赋予全部用户可执行权限)

2)/PATH/TO/SCRIPT_FILE

(2)直接运行解释器,将脚本以命令行参数传递给解释器程序;

bash
/PATH/TO/SCRIPT_FILE

(此方法和脚本本省有无执行权限无关)

注意:1)脚本中的空白行会被解释器忽略;

2)空白行表示:加一行echo,则显示为空白行

3)注释行:除shebang,余下所有以#开头的行,都会被视作)注释行而被忽略

4)shell脚本的运行是通过运行一个子shell进程实现的;

二、算数运算

1.算数符号:   +,-,*,/, 
**, %

2.加法运算格式

(1) let  VAR=算术运算表达式

(2) VAR=$[算数运算表达式]

(3) VAR=$((算数运算表达式))

(4) expr命令 :VAR=$(expr
$ARG1 $OP $ARG2)

注意:乘法符号(*)在有些场景中需要使用转义符,防止和通配符、正则表达式冲突

3.增强型赋值:变量做某种算术运算后回存至此变量中

(1)let i=$i+#    let i+=#

+=,-=,*=,
/=, %=

(2)自增

VAR=$[$VAR+1];let  VAR+=1;let  VAR++

(3)自减

VAR=$[$VAR-1];let  VAR-=1;let  VAR--

三、传递参数

1.位置参数变量

(1)# myscript.sh  argu1 argu2

引用方式:$1,  $2, ..., ${10}, ${11}, ...

$1:第一个输入参数

$2第二个传递的参数

当两位数时要用括号括起来${10}, ${11}, ..

(2)轮替机制:调用n个位置变量

shift   [n]:位置参数轮替;每次剔除n个,默认为1个

2.特殊变量

$0 脚本本身路径

$#脚本参数的个数

$*显示所有参数,各参数读成多个独立字符串

[email protected]显示所有参数,各参数读成一个完整的字符串形式

3.read:用户交互,通过键盘输入数据,从而完成变量赋值操作

read [option]... [变量name ...]

-p ‘PROMPT‘  显示提示信息

-t TIMEOUT   超出时间提前结束

time out and return failure if a complete line of input is not read withint TIMEOUT seconds.

注意:一般输入以空格作为分隔符,但时当输入数量大于变量是,最后多余的全部赋予最后一个变量

四、条件测试

1.条件测试:判断某需求是否满足,需要由测试机制来实现

2.测试表达式编写语法

(1)执行命令,并利用命令状态返回值来判断;

0:成功

1-255:失败

(2)测试表达式

test  EXPRESSION

[
EXPRESSION ]

[[
EXPRESSION ]]

注意:EXPRESSION两端必须有空白字符,否则为语法错误;

3.bash的测试类型

(1)数值测试:数值比较,双目测试

-eq:是否等于;
[ $num1 -eq $num2 ]

-ne:是否不等于;

-gt:是否大于;

-ge:是否大于等于;

-lt:是否小于;

-le:是否小于等于;

(2)字符串测试:双目测试

==:是否等于;

>:是否大于;

<:是否小于;

!=:是否不等于;

=~:左侧字符串是否能够被右侧的PATTERN所匹配;

-z
"STRING":判断指定的字串是否为空;空则为真,不空则假;

-n
"STRING":判断指定的字符串是否不空;不空则真,空则为假;

注意:

1)字符串要加引用;

$变量时候,要"
",防止变量空值时候,比较两边类型不一致会报错

2)最好要使用[[ ]];但多个条件逻辑关系时可能要用[  ]

(3)文件测试:一般为单目测试,存在为真,不存在未假

1)文件存在性测试:

-a  FILE

-e  FILE

2)存在性及类型测试:

-b    FILE:是否存在并且为 块设备 文件;

-c  FILE:是否存在并且为 字符设备 文件;

-d  FILE:是否存在并且为 目录文件;

-f  FILE:是否存在并且为 普通文件;

-h  FILE或 -L 
FILE:是否存在并且为 符号链接文件;

-p
FILE:是否存在且为 命名管道文件;

-S  FILE:是否存在且为 套接字文件;

3)文件权限测试:

-r  FILE:是否存在并且 对当前用户可读;

-x  FILE:是否存在并且 对当前用户可执行;

-w  FILE:是否存在并且 对当前用户可写;

4)特殊权限测试:

-u  FILE:是否存在并且 拥有suid权限;

-g  FILE:是否存在并且 拥有sgid权限;

-k  FILE:是否存在并且 拥有sticky权限;

5)文件是否有内容:

-s  FILE:是否有内容;

6)时间戳测试:

-N
FILE:文件自从上一次读操作后是否被修改过;

7)从属关系测试:

-O  FILE:当前用户是否为文件的属主;

-G  FILE:当前用户是否属于文件的属组;

8)双目测试:

FILE1  -ef 
FILE2:是否指向同一个文件系统的相同inode的硬链接;

FILE1  -nt 
FILE2:FILE1是否新于FILE2;

FILE1  -ot 
FILE2:FILE1是否旧于FILE2;

4.组合测试条件:逻辑运算

(1)第一种方式:

COMMAND1
&& COMMAND2

COMMAND1
|| COMMAND2

!
COMMAND

[
-O FILE ] && [ -r FILE ]

(2)第二种方式:

EXPRESSION1  -a 
EXPRESSION2

EXPRESSION1  -o 
EXPRESSION2

!
EXPRESSION

[
-O FILE -a -x FILE ]

5.脚本的状态返回值

(1)默认是脚本中执行的最后一条件命令  的状态返回值

(2)自定义状态退出状态码

exit [n]:n为自己指定的状态码

注意:shell进程遇到exit时,即会终止,因此,整个脚本执行即为结束;

6.脚本检测&调试

bash -n /path/to/some_script  检测脚本中的语法错误,不能检出出逻辑错误

bash -x /path/to/some_script  调试执行,显示过程

时间: 2024-10-18 11:45:41

Shell脚本编程概述(一):算数运算和条件测试的相关文章

Shell脚本编程概述(三):函数和数组

一.函数:function 1.function概念 function是一种过程式编程,目的在于代码重用,是一种模块化编程.结构化编程编程方式 函数:把一段独立功能的代码当作一个整体,并为之一个名字:命名的代码段 注意: 1) 定义函数的代码段不会自动执行,在调用时执行:所谓调用函数,在代码中给定函数名即可: 2) 函数名出现的任何位置,在代码执行时,都会被自动替换为函数代码: 2.语法 语法一: function  FUNCTION_NAME  { ...函数体... } 语法二: FUNCT

bash算数运算和条件测试语句

一.利用bash脚本编程实现算术运算: 1) +.-:加运算 *./ %:模运算,取余数 **|^ 2)增强型的算术运算符号: += :let B=B+2   --> let B+=2 -= :let B=B-2 --> let B-=2 *= :let B=B*2 --> let B*=2 /= :let B=B/2 --> let B/=2 %= :let B=B%2 --> let B%=2 3)特殊的增强型算术运算: let B=B+1   --> let B+

Shell脚本编程概述(四):bash内置字符处理工具

一.字符串切片: ${var:offset:number}  取字符串的子串: 取字符趾的最右侧的几个字符:${var:  -length} 注意:冒号后必须有一个空白字符: 二.基于模式取子串: 1.${var#*word} word是指定的分隔符: 自左而右查找var变量所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符间所有字符 2.${var##*word} 自左而右查找var变量所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符间所有字符 3.

Linux shell脚本编程if语句的使用方法(条件判断)

if 语句格式if  条件then Commandelse Commandfi        别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unexpected end of fi     if 的三种条件表达式 ifcommandthen if 函数then 命令执行成功,等于返回0 (比如grep ,找到匹配)执行失败,返回非0 (grep,没找到匹配)if [ expression_r_r_r  ]then    表达式结果为真,则返回0

shell脚本编程之算数运算

#/bin/bash 在进行shell脚本编程之前一定要在脚本的开头加上上头这一句话,并且要顶着头写,前头不能有空格和空行.这句话的意思是告诉系统用哪一种shell来执行此脚本.如果没有这句话就有可能发生一些意想不到的错误. 接下来说一说在shell脚本中或命令行中如何进行算数运算.也许你已经发现,因为shell中的变量的格式都为字符类型,所以如果只是简单的让一个变量去等于一个表达式的话,那么当输出此变量的时候输出的还是哪个表达式,而并不是表达式所得出来的结果,比如:  ~]$ a=1+2  ~

Linux中的shell脚本编程——基础篇

概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础.脚本基本格式.变量.运算.条件测试这几个方面详细介绍shell脚本编程的基础内容,也是我们必须要掌握熟练的内容. 一.编程环境 1.程序:指令+数据 程序编程的风格有两种: 过程式:以指令为中心,数据服务与指令 对象式:以数据为中心,指令服务于数据 2.程序的执行方式: □计算机:只能识别二进制文件

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

Linux中的shell脚本编程——函数

概述: 本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值.除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用.最重要的是讲解shell脚本编程中函数的用法.这些内容都要熟练掌握. 一.循环语句的特殊用法: 1.while循环的特殊用法(遍历文件的每一行): □语法:while read line; do 循环体 done < /PATH/FROM/SOMEFILE □意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将

关于shell脚本编程第一篇

shell脚本编程(1)脚本的基本格式:              程序:指令+数据程序编程风格分为两种:                    过程式:以指令为中心,数据服务于指令                    对象式:以数据为中心,指令服务于数据过程式编程有以下几个特点:                        顺序执行                        循环执行                        选择执行shell编程:          过程式.解释