shell 脚本编程基础

一.编程基础

程序:指令+数据

程序编程风格:

过程式:以指令为中心,数据服务于指令

对象式:以数据为中心,指令服务于数据

shell程序:提供了编程能力,解释执行

1.程序的执行方式

计算机:运行二进制指令;

编程语言:

低级:汇编

高级:

编译:高级语言–>编译器–>目标代码

java,C#

解释:高级语言–>解释器–>机器代码

shell, perl, python

2.编程基本概念

编程逻辑处理方式:

顺序执行

循环执行

选择执行

shell编程:过程式、解释执行

编程语言的基本结构:

数据存储:变量、数组

表达式: a + b

语句:if

3.编程程序语言分类

强类型:定义变量时必须指定类型、参与运算必须符合类型

要求;调用未声明变量会产生错误

如 java,python

弱类型:无须指定类型,默认均为字符型;参与运算会自动

进行隐式类型转换;变量无须事先定义可直接调用

如: bash 不支持浮点数

变量命名法则:

1、不能使程序中的保留字:例如if, for;

2、只能使用数字、字母及下划线,且不能以数字开头

3、见名知义

4、统一命名规则:驼峰命名法(单词首字母大写)

小驼峰法(仅开头的单词首字母大写)

二.shell脚本基础

shell脚本是包含一些命令或声明,并符合一定格式的文本文件

格式要求:首行shebang机制

#!/bin/bash      ———–》 指定解释器

#!/usr/bin/python

#!/usr/bin/perl

注释:   单行注释 :    #注释内容

多行注释:      :<<EOF     注释内容       EOF

shell脚本的用途有:

自动化常用命令

执行系统管理和故障排除

创建简单的应用程序

处理文本或文件

2 创建shell脚本

第一步:使用文本编辑器来创建文本文件

第一行必须包括shell声明序列: #!

#!/bin/bash

添加注释

注释以#开头

第二步:运行脚本

给予执行权限,在命令行上指定脚本的绝对或相对路径

直接运行解释器,将脚本作为解释器程序的参数运行

执行分类以及区别:

1:   。或者source script_name.sh  :

在当前bash中执行脚本,脚本中的变量可以调用

2:   chmod +x后 直接执行 script_name.sh :

调用一个新的bash子进程来执行脚本,脚本中的变量无法再父shell中使用

3:   bash script_name.sh  :  同上

3 脚本调试

bash -n /path/to/some_script

检测脚本中的语法错误

bash -x /path/to/some_script

调试执行

三.变量

1.变量:命名的内存空间

数据存储方式:

字符:

数值:整型,浮点型

变量:变量类型

作用:

1、数据存储格式

2、参与的运算

3、表示的数据范围

类型:

字符

数值:整型、浮点型

注: bash中不支持浮点型,默认视为 字符 型

涉及数学运算时,应该注意强制声明类型

2.bash中变量的种类

根据变量的生效范围等标准:

本地变量:生效范围为当前shell进程;对当前shell之外

的其它shell进程,包括当前shell的子shell进程均无效

环境变量:生效范围为当前shell进程及其子进程

局部变量:生效范围为当前shell进程中某代码片断(通常

指函数)

位置变量: $1, $2, …来表示,用于让脚本在脚本代码

中调用通过命令行传递给它的参数

特殊变量:  $?  命令执行状态码

$0: 命令本身

$*: 传递给脚本的所有参数,全部参数合为一个字符串

[email protected]: 传递给脚本的所有参数,每个参数为独立字符串

$#: 传递给脚本的参数的个数

[email protected] $* 只在被双引号包起来的时候才会有差异

3.变量类型强制声明:

declare option value_name=value

-a   indexed arrays  索引

-A  arrays   数组

-i    integer 整数

-r    只读

-x   环境变量

-f   声明函数

4 .本地变量

变量赋值: name=‘value’,

可以使用引用value:

(1) 可以是直接字串; name=“root"

(2) 变量引用: name="$USER"

(3) 命令引用: name=`COMMAND`, name=$(COMMAND)

变量引用: ${name}, $name

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

‘‘:强引用,其中的变量引用不会被替换为变量值,而保

持原字符串

显示已定义的所有变量: set

删除变量: unset name

5.环境变量

变量声明、赋值:

export name=VALUE

declare -x name=VALUE

变量引用: $name,

${name}   (当变量后边含有其他字符时候需要此格式)

eg:   a = b${c}d

显示所有环境变量:

export

env

printenv

删除: unset name  (当变量不再需要使用时,应及时释放变量以节省空间)

bash有许多内建的环境变量: PATH, SHELL, USRE,UID,

HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1

6.只读和位置变量

只读变量:只能声时,但不能修改和删除,仅退出登录时才释放

readonly name

declare -r name

位置变量:在脚本代码中调用通过命令行传递给脚本的参数

$1, $2, …:对应第1、第2等参数, shift [n]换位置

$0: 命令本身

$*: 传递给脚本的所有参数,全部参数合为一个字符串

[email protected]: 传递给脚本的所有参数,每个参数为独立字符串

$#: 传递给脚本的参数的个数

[email protected] $* 只在被双引号包起来的时候才会有差异

示例:判断给出的文件的行数

linecount="$(wc -l $1| cut -d‘ ‘ -f1)"

echo "$1 has $linecount lines."

三.算术运算

1. bash中的算术运算:help let

+, -, *, /, %取模(取余) , **(乘方)

实现算术运算:

(1) let var=算术表达式

(2) var=$[算术表达式]

(3) var=$((算术表达式))

(4) var=$(expr arg1 arg2 arg3 …)

(5) declare –i var = 数值

(6) echo ‘算术表达式’ | bc

乘法符号有些场景中需要转义, 如*

(7)expr N +/-  M  也可以用于计算,后面接参数,需要空格

% * 等需要加 \ 转义

(仅能用于计算整数,否则会报错,可以用于检测是否为整数)

bash有内建的随机数生成器: $RANDOM( 1-32767)

echo $[$RANDOM%50] : 0-49之间随机数

2.赋值

增强型赋值:(注:仅支持let)

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

let varOPERvalue

例如:let count+=3

自加3后自赋值

自增,自减:

let var+=1

let var++

let var-=1

let var–

let var=++1    先自加1再使用

let var=1++    先使用再自加1

3.逻辑运算

true, false

1, 0

与:

1 与 1 = 1

1 与 0 = 0

0 与 1 = 0

0 与 0 = 0

或:

1 或 1 = 1

1 或 0 = 1

0 或 1 = 1

0 或 0 = 0

4.逻辑运算

非:!

! 1 = 0

! 0 = 1

5. 短路运算:

短路与:(&&)

第一个为0,结果必定为0;

第一个为1,第二个必须要参与运算;

短路或:(  | |  )

第一个为1,结果必定为1;

第一个为0,第二个必须要参与运算;

异或: ^

异或的两个值,相同为假,不同为真

6.聚集命令

有两种聚集命令的方法:

复合式: date; who | wc -l

命令会一个接一个地运行

(此处先执行date ,   再执行  who | wc -l )

子shell: (date; who | wc -l ) >>/tmp/trace

所有的输出都被发送给单个STDOUT和STDERR

7.退出状态

进程使用退出状态来报告成功或失败

0 代表成功, 1-255代表失败

$? 变量保存最近的命令退出状态

例如:

$ ping -c1 -W1 hostdown &> /dev/null

$ echo $?

8.退出状态码

bash自定义退出状态码

exit [n]:自定义退出状态码;

注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出

状态取决于exit命令后面的数字

注意:如果未给脚本指定退出状态码,整个脚本的退出状态码

取决于脚本中执行的最后一条命令的状态码

时间: 2024-08-04 22:32:55

shell 脚本编程基础的相关文章

Linux shell脚本编程基础之练习篇

shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash if [ $# -ne 1 ] then echo "请输入一个参数" exit else echo "参数正确" newfile=$1 fi #echo `grep "^#\!" ${newfile}` if ! grep "^#\!" ${newfile} &>/

第九章、shell脚本编程基础

第九章.shell脚本编程基础 本章内容 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 程序的执行方式 计算机:运行二进制指令 编程语言: 低级:汇编 高级: 编译:高级语言-->编译器-->目标代码 java,C# 解释:高级语言-->解释器-->机器代码 shell, perl, python (系统后台

文本处理工具和正则表达式、shell脚本编程基础-第四周

第四周-文本处理工具和正则表达式.shell脚本编程基础1. 统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户的个数,并将用户都显示出来grep -v '/sbin/nologin' /etc/passwd|wc -lgrep -v '/sbin/nologin' /etc/passwd|cut -d: -f12. 查出用户UID最大值的用户名,UID及shell类型.cut -d: -f1,3,7 /etc/passwd|sort -t: -k2 -nr

Shell脚本编程基础

什么是Shell 操作系统最外层的程序,shell通过提示符让用户输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来,管理用户与操作系统之间的交互. Shell是一个用户跟操作系统之间的一个命令解释器.Shell是用户与Linux操作系统之间沟通的桥梁.用户可以输入命令执行,又可以利用 Shell脚本编程去运行. 为什么要用到shell shell是一个交互式程序,当用户输入一条命令,shell就解释一条,一次只处理一条命令.如果我们一些复杂操作,逐个敲命令工作量就会增大,因此,我

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

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

shell 脚本编程基础篇

一级标题 二级标题 1.编程基础 Linus:Talk is cheap, show me the code 程序组成 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结构:数据在计算机中的类型和组织方式 面向过程语言 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如 果出现了情况B,做什么处理 问题规模小,可以步骤化,按部就班处理 以指令为中心,数据服务于指令 C,shell 面向对象语言 一种认识世界.分析世界的方法论.将万事万物抽象为各

算法及shell脚本编程基础

bash存在多命令执行的特性,例如:# COMMAND1 $(COMMAND2):还有进程之间的通信(IPC):# COMMAND1 | COMMAND2- 一.命令执行结构与算法 命令执行中,存在顺序执行结构:分号分隔 # COMMAND1 ; COMMAND2 ; -.同时存在选择执行结构:逻辑运算与.或.非.异或,其中最主要的为选择执行结构,具体讨论如下. 1.与:逻辑乘法 && 状态返回值:0对应TRUE,1-255对应FALSE 具体算法为:True &&true

shell脚本编程基础知识

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务. Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell.bash是很多linux系统的默认shell. 下面开始写一个范例shell #!/bin/bashecho "Hello World

Shell脚本编程基础——Linux基本命令(11)

1.Shell脚本基础 (1)shell脚本 包含一些命令或声明,并符合一定格式的文本文件 格式要求:首行shebang机制 #!/bin/bash #!/usr/bin/python #!/usr/bin/perl (2)格式要求 脚本代码开头约定: 1.第一行一般为调用使用的语言 2.程序名,避免更改文件名为无法找到正确的文件 3.版本号 4.更改后的时间 5.作者相关信息 6.该程序的作用,及注意事项 7.最后是各版本的更新简要说明(也可以不写) 其实最重要的是第一行,其他行也可以不写,但