首页 > 系统相关 >8、shell 脚本

8、shell 脚本

时间:2024-04-12 22:33:05浏览次数:27  
标签:脚本 shell etc sh 字符串 dhcpd test dhcp

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:换行符

 

标签:脚本,shell,etc,sh,字符串,dhcpd,test,dhcp
From: https://www.cnblogs.com/luoluostudy/p/18130187

相关文章

  • 使用Xshell中的SFTP完成远程文件传输
    新建SFTP会话填写连接信息设置本地和远程目录的映射选中回话然后鼠标右键选择属性连接SFTP终端输入help命令查看SFTP命令测试文件传输在对应目录随便创建一个文件并且写上内容在linux终端使用put拉取windows11上的这个aaa.txt文件到虚拟中查看是否有aaa.txt文件......
  • centos 7 安装 jdk 的脚本文件
    新建bash文件点击查看代码#!/bin/bash#1.CheckifJavaisinstallediftype-pjava;thenecho"Javahasbeeninstalled."exit0else#2.InstallJava#检查是否提供了Java安装包的路径if[-z"$1"];thenecho"Usage:$......
  • 在代码中获得linux shell命令执行结果的方法
    1.使用``符号``符号,及键盘左上角的反引号,类似markdown的内嵌代码,可以直接获得命令的执行结果作为字符串。charbuf[100];sprintf(buf,"echo\"`date`:%d\">>~/test_data.txt",123);system(buf);2.使用管道#defineCMD_RESULT_BUF_SIZE1024intExecute......
  • SQL 执行大脚本 提示内存不足 解决办法
    SQL 执行大脚本 提示内存不足 解决办法 用微软自带的sqlcmd工具,可以导入执行。以SQL Server 2008R版本为例:第一步:Win+R 键入:cmd 命令,开启命令行工具;第二步:键入:cd C:\Program Files\Microsoft SQL Server\100\Tools\Binn (具体目录路径跟你安装的SQL位置有关)第三步:键入......
  • 在Linux中, 什么是shell函数?如何使用它们?
    在Linux中,shell函数是一种在shell脚本中封装重复使用的代码片段的方法,用于提高代码的可读性和复用性。shell函数类似于其他编程语言中的函数概念,允许程序员定义一组指令序列,将其作为一个整体调用,并在需要的时候执行这些指令。1.定义shell函数的基本语法:有两种方式来定义shell函......
  • 在Linux中,如何编写一个脚本来自动执行日常任务?
    在Linux中,编写脚本以自动执行日常任务是一种常见的自动化方法。这些脚本可以利用shell的命令行功能来简化重复性工作,提高效率。以下是一个简单的shell脚本编写和执行的步骤:1.选择脚本编辑器首先,选择一个文本编辑器来编写脚本。常用的编辑器有vi、nano、emacs等。2.创建脚本文......
  • linux中通过init.d下的服务脚本实现开机启动
    目录一:创建脚本二:通过/etc/rc.local实现开机启动三:通过update-rc.d实现开机启动四:通过chkconfig实现开机启动五:相关说明一:创建脚本服务脚本要包括start,stop,restart这些方法,示例FileBackup.sh#!/bin/bash###BEGININITINFO#Provides:airven#Required-Start......
  • 肖sir_jmeter之录制脚本(badboy)
    脚本录制: 一、badboy录制脚本=======================================1、设计性能场景2、根据性能场景录制性能脚本(badboy或者jmeter中反向代理录制脚本)=======================================3、badboy工具的使用(1)下载badboy包   (2)安装badboy包第一步:  ......
  • 肖sir_jmeter之录制脚本(反向代理)
    jemeter自带的录制脚本功能,是利用代理服务器来进行录制的1,新建一个线程组2,新建一个代理服务器右击工作台-添加-非测试元件-http代理服务器   3,配置http代理服务器 端口:默认为8888,可修改。但要注意,端口不能被其它程序占用,端口信息要与浏览器设置保持一致。cmd.exe......
  • shell practice 04
    #!/bin/bash#author:Chiweiming#version:v1#date:2024-03-26<<COMMAND检查某个目录下的所有文件和目录,看是否满足下面条件:1)所有文件权限为6442)所有目录权限为7553)文件和目录所有者为xxx,所属组为xxx如果不满足,改成符合要求注意:不要直接修改权限,一定要有判断的......