1.shell 脚本基础

作用:介于系统内核与用户之间,负责解释命令行

1.1.第一个 shell 脚本

vim first.sh

cd /boot/
pwd
ls -lh vml*z

赋予可执行权限:chmod +x firest.sh

执行脚本方式(三种)

./first.sh

sh /first.sh

source /first.sh

完善脚本构成:脚本声明;注释信息;可执行语句

vim /first.sh

#!/bin/bash
# This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以 vml 开头的文件包括:"
ls -lh vml*

1.2.重定向与管道操作

交互式硬件设备

  标准输入:从该设备接收用户输入的数据

  标准输出:通过该设备向用户输出数据

  标准错误:通过该设备报告执行出错信息

重定向操作

管道符:将左侧的命令输出结果,作为右侧命令的处理对象

1.3.变量

类型:

  自定义变量

  环境变量:用于设置工作环境

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

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

赋值时使用引号:

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

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

  反引号:命令替换,提取命令执行后的输出结果

从键盘输入内容为变量赋值:

read [-p "提示内容"] 变量名

常用运算符:

+、-、\*、/、%(求模、取余运算)

环境变量:

配置文件:/etc/profile、~/.bash_profile

常见环境变量:

  PWD、PATH、USER、SHELL、HOME

位置变量:

表示为 $n(n为 1-9 的数字)

预定义变量:

$#:命令行中位置变量的个数
$*:所有位置变量的内容
$?:上一条命令执行后返回的状态,当返回状态值为 0 时表示执行正常,非 0 值表示执行异常或出错
$0:当前执行的进程/程序名

1.4.一键搭建 dhcp 服务

vim /root/install-dhcp.sh

#!/bin/bash
umount /dev/sr0
mount /dev/sr0 /media
rm -rf /etc/yum.repos.d/*
echo "[test-sh]" >> /etc/yum.repos.d/test.repo
echo "name=test" >> /etc/yum.repos.d/test.repo
echo "baseurl=file:///media" >> /etc/yum.repos.d/test.repo
echo "enable=1" >> /etc/yum.repos.d/test.repo
echo "gpgcheck=0" >> /ect/yum.repos.d/test.repo
yum -y install dhcp*

read -p "subnet:" NET
read -p "network:" MASK
read -p "range:" RANGE
read -p "dns1:" DNS1
read -p "dns2:" DNS2
read -p "gateway:" GATE
read -p "broadcast:" BROA
echo "subnet $NET netmask $MASK {" > /etc/dhcp/dhcpd.conf
echo "range $RANGE;" >> /etc/dhcp/dhcpd.conf #指定IP地址范围
echo "option domain-name-servers $DNS1,$DNS2;" >> /etc/dhcp/dhcpd.conf
echo 'option domain-name "internal.example.org";' >> /etc/dhcp/dhcpd.conf
echo "option routes $GATE;" >> /etc/dhcp/dhcpd.conf
echo "option broadcast-address $BROA;" >> /etc/dhcp/dhcpd.conf
echo "default-lease-time 600;" >> /etc/dhcp/dhcpd.conf
echo "max-lease-time 7200;" >> /etc/dhcp/dhcpd.conf
echo "}" >> /etc/dhcp/dhcpd.conf
systemctl start dhcpd

1.5.test 命令

测试特定的表达式是否成立,当条件成立时,测试语句的返回值为 0,否则为其他数值

格式1:test 条件表达式

格式2:[ 条件表达式 ](至少应该有一个空格)

文件测试

[ 操作符 文件或目录 ]

常用测试操作符:

-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(excute)

[ -d /media/cdrom ]

echo $?(返回 0 表示条件成立,否则不成立)

[ -d /media/cdrom ] && echo "YES"

1.6.整数值比较

[ 整数1 操作符 整数2 ]

-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于或等于
-le:小于或等于

1.7.字符串比较

格式1:[ 字符串1 = 字符串2 ] 或者 [字符串1 != 字符串2 ]

格式2:[ -z 字符串 ]

=:字符串内容相同
!=:字符串内容不同
-z:字符串内容为空

2.shell 脚本分支语法

2.1.if 语句

if 条件测试操作
then 命令序列
elif 条件判断
then 命令序列
else
命令执行语句
fi

3.shell 脚本循环语法

3.1.while 循环

while 条件测试操作
do
命令序列
done

3.2.for 循环

for 变量名 in 取值列表
do
命令序列
done

3.3.case 语句

case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认命令序列
esac

4.正则表达式使用

4.1.正则表达式组成

普通字符:大小写字母、数字、标点符号及其他一些符号

元字符:在正则表达式中具有特殊意义的专用字符

常见元字符:

^:开头
$:结尾
.:单个任意字符
\:使右侧正则符号失去含义,变为字符
*:匹配左侧表达式 0 次到任意次
[]:范围选择匹配符,匹配的信息不再是任意,由 [] 内信息决定
{}:匹配左侧表达式的个数,在 shell 中需要转义:\{\}
{n}:匹配左侧表达式 n 个
{n,}:匹配左侧表达式 n 个到任意个
{n,m}:匹配左侧表达式 n 个到 m 个(最少 n 个,最多 m 个)

IP地址正则:[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}

扩展
+:匹配左侧表达式一个或多个
?:匹配零个或一个
|:多个信息中匹配某一个
():查找 “组” 字符串
()+:辨别多个重复的组

\t:表示横向制表符,tab 大空格
\n:换行符

8、shell 脚本的更多相关文章

  1. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  2. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  3. shell脚本规划化模板

    shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...

  4. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  5. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  6. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  7. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  10. shell 脚本之循环使用 for while 详解

    任何一种编程语言中循环是比不可少的,当然 shell 脚本也少不了循环语句,包括 for 语句. while 语句.文中主要以实际用例来说明 for while 都有哪些常见的使用方法和技巧. 一.f ...

随机推荐

  1. 基于SCCB协议的FPGA实现

    SCCB协议 1.协议内容 SCCB协议常用于vo系列的摄像头的寄存器配置中,是有IIC协议演变而来.本来,本人接触这个协议也是想配置摄像头用于摄像模块.但是,由于配置寄存器实在是太多,而且需要找的资 ...

  2. CornerNet-Lite:CornerNet粗暴优化,加速6倍还提点了 | BMVC 2020

    论文对CornerNet进行了性能优化,提出了CornerNet-Saccade和CornerNet-Squeeze两个优化的CornerNet变种,优化的手段具有很高的针对性和局限性,不过依然有很多 ...

  3. KingbaseES数据库使用kdb_database_link扩展常见问题

    KingbaseES数据库使用kdb_database_link扩展常见问题 kdb_database_link主要功能是为了满足@link语法的适配,让用户应用的代码能够适用于更宽泛的产品而无需在移 ...

  4. 探索Avalonia:C#跨平台UI框架的力量

    随着跨平台应用的需求不断增长,开发人员需要一种能够在不同操作系统上运行的用户界面(UI)框架. Avalonia 是一种引人注目的选择.在本文中,我们将深入了解 Avalonia 是什么,它与 WPF ...

  5. 动态规划(四)——区间dp

    区间dp: 就是对于区间的一种动态规划,对于某个区间,它的合并方式可能有很多种,我们需要去枚举所有的方式,通常是去枚举区间的分割点,找到最优的方式(一般是找最少消耗). 通常都是先枚举区间长度,区间长 ...

  6. redis 简单整理——redis 的列表基本结构和命令[四]

    前言 简单整理一下redis的列表. 正文 列表(list)类型是用来存储多个有序的字符串,如图2-18所示,a. b.c.d.e五个元素从左到右组成了一个有序的列表,列表中的每个字符串 称为元素(e ...

  7. 重新整理.net core 计1400篇[二] (.net core 改造控制台项目)

    前言 为.net core 命令行的基础上写的,如果有兴趣的话,可以去看我的.net core 前文. 下面介绍如何将.net core控制台转换为.net core web应用. 正文 如果我们要实 ...

  8. cv2在图像上画不同比例的锚框

    ''' cv2在图像上画不同比例的锚框 ''' import cv2 import math # 画宽高比1:1的锚框 def display_11_anchor(img,anchor_11_left ...

  9. 一个简单的开源消息中间件 FolkMQ v1.4.2 发布

    功能简表 角色 功能 生产者(客户端) 发布消息.定时消息(或叫延时).顺序消息.可过期消息.事务消息.支持 Qos0.Qos1 消费者(客户端) 订阅.取消订阅.消费-ACK(自动.手动) 服务端 ...

  10. SSM整合项目中使用百度Ueditor遇到的问题。

    问题描述:无法上传图片,提示配置项加载有问题 大致情形:直接下载的ue编辑器,放在了/resources/   目录下,也就是静态资源路径,然后更改web.xml,将tomcat默认拦截器配置放到所有 ...