shell脚本

t01c8d0a587f7a91802

编程基础:

程序:指令+数据

程序编程风格;

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

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

高级:

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

Java、C#

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

shell、Perl、Python

编程逻辑处理方式:

顺序执行

循环执行

选择执行

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

编程语言的基本结构:

各种系统命令的组合

数据存储:变量、数组

表达式:a + b

语句:if

格式要求:首行shebang机制

#!/bin/bash

#!/usr/bin/python

#!/usr/bin/perl

大批量重复的程序可以写成脚本

脚本格式

shebang要求必须写

添加注释

注释用#开头

运行脚本给执行权限

脚本命令没有关联时前面的命令报错不影响后面的命令;如有关联时反之。

bash -n [脚本] #测试脚本

bash -x [脚本] #调试执行

+表示执行的命令

++表示嵌套的执行命令

变量:命名空间的数据

变量定义命令时加反向单引号

调用变量时要加$

变量引用文件,显示时加双引号保留其格式

例如:fdtab=`cat /etc/fdtab`

echo “fdtab”

bash变量不分类型,直接赋值即可(都是字符,不支持浮点数)

关键字不能当变量

例如:if for ls hostname等

变量不能用数字或数字打头

见名知意

统一命名规则:驼峰命名法

例如:HostName、hostName

bash变量的种类

局部变量:特定场合有效,当前进程有效,其子进程无效,其父进程也无效

pstree -p #查看进程树附属关系

环境(全局)变量:当前shell进程及其子进程有效,子进程可以更改赋值但不能父进程的赋值不更改

export #赋值全局变量

unset [变量] #删除变量,不加$

set 显示所有变量以及函数

printenv:同上

export:同上

declare -x:同上

declare -r:显示“常量”

位置变量

定义10以上的变量加{}系统才能识别数字变量

$1,$2…..$n:对应第1、第2等参数($10)使用时用大括号扩起来${10}

$*:把所有参数合并成一个整体,用双引号引起等同于$@

$0:如果是软连接,显示其软链接的文件名

$@:每个参数为独立字符

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

shift:移动输入参数,默认移动一位(换位)

set–:删除所有位置变量

特殊变量

$_:上一个命令的参数

$*:把所有参数合并成一个整体,用双引号引起等同于$@

$0:如果是软连接,显示其软链接的文件名

$@:每个参数为独立字符

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

$$:当前进程的ID

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

shift:移动输入参数,默认移动一位

set–:删除所有位置变量

 

 

bash内建的环境变量:

$PATH

$SHELL

$USER

$UID

$HOME

$PWD

$SHLVL:shell嵌套深度

$LANG

$$:当前进程ID

$PPID:父进程ID

$MAIL

$HOSTNAME

$HISTSIZE

—:上一个命令的最后一个字符串

声明只读变量(常量):

readonly name:只能调用不能更改不能删除,生命周期=当前进程的有效生命周期

declare -r name:

命令加小括号:相当于开启了一个临时的子进程但不是子进程,执行完命令后回到当前进程

例如:(cd /etc ; rm -rf ) #执行完回到当前目录

声明变量加小括号:临时声明执行,只执行一次后删除

例如:(name=wang;echo $name)

小括号开启子shell不影响当前shell

x=1;echo “pid=$$”;(echo “subpid=$$”;echo “subx=$x”;x=2;echo “subx2=$x”);echo x=$x

pid=2887

subpid=2887

subx=1

subx2=2

x=1

大括号开启子shell影响当前shell

退出状态

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

语法错误$?不为零,命令错误$?由最后一条命令决定

脚本中exit可以定义$?返回的值

ping -c# [IP地址] #指定ping几次

算术运算:

+,-,*,/,%取余,**乘方

let 变量=算术表达式

变量=$[算术表达式]

变量=$((算术表达式))

变量=$(expr arg1 arg2 arg3 …)

declare –i var = 数值 #把变量声明成数值

echo ‘算术表达式’ | bc

赋值

增强型赋值:

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

逻辑运算

&:与

0&0=0

0&1=0

1&0=0

1&1=1

0为false假

1为true真

|:或

0|0=0

0|1=1

1|0=1

1|1=1

^:异或

相同为假,不同为真

0^0=0

0^1=1

1^0=1

1^1=0

例如:

替换a和b的赋值

a=6

b=4

a=$[a^b];b=$[a^b];a=$[a^b];echo $a $b

&&:短路与,

例如:cmd1&&cmd2

命令一为假,命令二则不执行,命令一为真,执行命令二

||:短路或,

例如:cmd1||cmd2

命令一为真,命令二则不执行,命令一为假,执行命令二

!:非

test #判断变量

[ -n 变量 ] 判断变量是否为非空0为非空1为空 相当于[ 变量 ]

[ -z 变量 ] 判断变量是否为空1为非空0为空

[[]] 使用正则表达式时使用

数值测试

-v 变量 :查看变量是否赋值

数值测试:

-gt  是否大于

-ge  是否大于等于

-eq  是否等于

-ne  是否不等于

-lt  是否小于

-le  是否小于等于

字符串测试:

==  是否等于

>  ascii码是否大于ascii码

<  是否小于

!=  是否不等于

=~  左侧字符串是否能够被右侧的扩展正则所匹配,需要配合[[]]使用

bash的文件测试

bash [脚本]:开启一个子进程相当于(./脚本)

read :把标准输入赋值给一个或者多个变量用空格分隔开

-p:指定要显示的提示

-s:静默输入

read x y z <<< “i j k”:批量赋值

.和source以及bash执行的区别

bash [脚本]和./[脚本]执行结果相同,在脚本的子进程中运行

source [脚本]和. [脚本]:在当前shell运行

脚本中不支持命令别名;也不支持定义别名

变量$-

h:开启hash缓存表功能

i:表示当前shell是交互式shell

m:打开监控模式

B:大括号扩展

H:打开history的H选项

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95703

(0)
老司机丨快上车老司机丨快上车
上一篇 2018-04-11 19:35
下一篇 2018-04-11 20:46

相关推荐

  • 系统启动

    1 第一步 POST:Power-On-Self-Test,加电自检 检查负责完成对CPU、主 板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测 2 选择第一个硬盘做为启动设备 在硬盘里找第一个扇区 (MBR) 446个字节 属于grub的 第一个阶段 统称为 bootloade 引导加载器 3 因为系统的启动程序都放在b…

    Linux笔记 2018-05-13
  • redis

    分布式存储一定是每个节点只存储一部分数据。

    2018-07-20
  • memcached

    数据结构模型: 结构化数据:关系型数据库;mysql、mariadb、oracledb 半结构化数据:xml、json、nosql 非结构化数据:文件系统; 缓存系统的种类: 代理式缓存; 旁路式缓存; memcached的特性: k/v缓存:可序列化数据;存储项:key/value,标志,过期时间; 功能的实现一半依赖于服务端,一半依赖客户端; 分布式缓存…

    2018-07-14
  • 文本三剑客之awk

    awk的名称来源于三个开发者的姓名:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,Linux文本处理三剑客之一。

    2018-05-17
  • Linux基础知识

    Linux是什么? 想要了解linux,我们就需要先介绍一下计算机。什么是计算机?计算机的功能和组成部分? 计算机是什么呢?它是一种能接收和存储信息 ,并按照存储在其内部的程序对海量数据进行自动、高速地 处理,然后把处理结果输出的现代化智能电子设备。 它的基本功能就是接收用户输入的指令,通过CPU的数学与逻辑单元运算处理后,产生或者存储成有用的信息。 计算机…

    2018-05-10
  • Linux基础知识点(十二)

    此篇博客只是记录第十四周未掌握或不熟悉的知识点,用来加深印象。

    Linux笔记 2018-06-15