精华内容
下载资源
问答
  • 2021-11-23 20:31:57

    写一个脚本,实现判断10.0.0.0/24网段内在线的主机,并打印处理

    #!/bin/bash
    NET=10.0.0
    for HOST in {1..255};do
      {
      ping -c1 -W1 ${NET}.${HOST} &>/dev/null && echo "${NET}.${HOST} is up"
      }&
    done
    
    
    更多相关内容
  • Linux命令行与Shell脚本编程大全(第2版),Linux命令行与Shell脚本编程大全(第2版)书中源代码。
  • cat /mnt/log_function.sh #!/bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显示打印日志的时间...log_error打印shell脚本
  • Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。Shell可以直接使用在win/Unix/Li...

    3ad1fea0ab21f0fee425398fa0e546df.png

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。

    Shell可以直接使用在win/Unix/Linux上面,并且可以调用大量系统内部的功能来解释执行程序,如果熟练掌握Shell脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。

    本篇文档整理了来自网络的109个shell脚本,希望对大家有所帮助。代码清晰可复制,电子版有利于大家随时练习,提升实战能力,是融汇了Shell脚本所有核心知识点的集大成之作,是学习、提升、面试的必备精品,建议大家收藏保存起来。

    f4df491a347d0898eafa8cb6e391af86.png

    • 1.Dos 攻击防范(自动屏蔽攻击IP)

    • 2.Linux 系统发送告警脚本

    • 3.MySQL 数据库备份单循环

    • 4.MySQL 数据库备份多循环

    • 5.Nginx 访问访问日志按天切割

    • 6.Nginx访问日志分析脚本

    • 7.查看网卡实时流量脚本

    • 8.服务器系统配置初始化脚本

    • 9.监控 100 台服务器磁盘利用率脚本

    • 10.并发从数台机器中获取 hostname,并记录返回信息花费的时长,重定向到一个文件 hostname.txt中,在全部完成后输出花费时长最短的那台机器的 CPU 信息。


    7b81a5d6ab2034e651093e9b71660a41.png

    a0de19d658f5e2ebdf56a7341bd6d862.png

    5e672cb1aaa33eeea3ea1b6c80e6b39c.png

    9e1c7f095943af36b0c8ceaf589d1747.png

    上下滚动查看更多

    • 11.统计/proc 目类下Linux进程相关数量信息,输出总进程数,runninq 进程数,stoped 进程数,sleeing进程数,zo mbie 进程数。

    • 12.把当前目录(包含子目录)下所有后缀为".sh"的文件后缀变更为".shell",之后删除每个文件的第二行。

    • 13.判断目录/tmp/jstack是否存在,不存在则新建一个目录若存在则删除目录下所有内容。

    • 14.从 test.loq中截取当天的所有gc 信息日志,并统计 gc 时间的平均值和时长最长的时间。

    • 15.查找80端口请求数最高的前 20个IP地址,判断中间最小的请求数是否大于 500,如大于 500,则输出系统活动情况报告到 alert.txt,如果没有,则在 600s后重试,直到有输出为止。

    • 16.将当前目录下大于10K的文件转移到/tmp 目录,再按照文件大小顺序,从大到小输出文件名。

    • 17.企业微信告警

    • 18.FTP客户端

    • 19.SSH客户端

    • 20.Saltstack 客户端

    a8428e5adb6f9787fc6db7f5312e8b5f.png

    bdbd4ed46ee71c56dfb322cbd4de9620.png

    2ab98e6f1a01e445b8c05e8c79d01e57.png

    1bebfa59bca65b2d5acb734d15ce399c.png

    6eeb41f851af56edadadbb8ecdd11bf6.png

    上下滚动查看更多

    • 21.vCenter 客户端

    • 22.获取域名ssl 证书过期时间

    • 23.发送今天的天气预报以及未来的天气超势图

    • 24.SVN 完整备份

    • 25.zabbix 监控用户密码过期

    • 26.构建本地YUM

    • 27.备份当前日期文件

    • 28.DOS攻击防范(自动屏蔽攻击IP)

    • 29.批量创建多少个用户并设置密码

    • 30.快速在Ubuntu 20.04上架设LAMP服务器及WordPress 博客

    567da58b03e18a6f2e760ec12d1e71b3.png

    79b345b57cd943e6500f832bc51d1192.png

    a084e49c866b2fd52e3ab2d95bd2e1e9.png

    上下滚动查看更多

    • 31.每天自动备份 MySQL 数据库

    • 32.MySQL 数据库备份单循环

    • 33.MySQL 数据库备份多循环

    • 34.Nginx日志按要求切割

    • 35.生成10个随机数保存于数组中并找出其最大值和最小值

    • 36.查看网卡实时流量

    • 37.服务器系统配置初始化

    • 38.批量创建多个用户并设置密码

    • 39.一键查看服务器利用率

    • 40.找出占用CPU 内存过高的进程

    d2bb349ae28f6cdab2a9b93856c7dba6.png

    a309000ab24cbf33226c32c27a824c84.png

    eb56a2015f2221c8148d3053abaf20e5.png

    上下滚动查看更多

    • 41.查看网卡的实时流量

    • 42.监控多台服务器磁盘利用率脚本

    • 43.批量检测网站是否异常并邮队件通知

    • 44.批量主机远程执行命令脚本

    • 45.一键部署LNMP网站平台脚本

    • 46.监控MySQL主从同步状态是否异常脚本

    • 47.MySgl数据库备份脚本

    • 48.Nginx访问日志分析

    • 49.Nginx访问日志自动按天(周、月)切割

    • 50.自动发布Java项目(Tomcat)

    c0ceead122e0ed19cbfbdbaa4bd7463c.png

    8212204d8edbdf21ef04076b72109a0b.png

    c7d405ed3477b36432a10da6c73c7ff9.png

    8821d710f0e2076e8adecb1cf3e83e3f.png

    上下滚动查看更多

    • 51.自动发布PHP项目

    • 52.DOS攻击防范(自动屏蔽攻击IP)

    • 53.目录入侵检测与告警

    • 54.本地选择脚本auto build.sh

    • 55.服务器编译脚本 build.sh首先第一个使用的就是{$#}和($@)其次使用了字符串截取的操作

    • 56.本地expect登陆拷贝scp exec.sh脚本

    • 57.检测两台服务器指定目录下的文件—致性

    • 58.定时清空文件内容,定时记录文件大小

    • 59.检测网卡流量,并按规定格式记录在日志中

    • 60.计算文档每行出现的数字个数,并计算整个文档的数字总数

    • 61.从FTP服务器下载文件

    • 62.连续输入5个100以内的数字,统计和、最小和最大

    • 63.监测 Nginx 访问日志 502情况,并做相应动作

    • 64.将结果分别赋值给变量

    • 65.批量修改文件名

    • 66.统计当前目录中以html结尾的文件总大小

    • 67.扫描主机端口状态

    • 68.输入数字运行相应命令

    • 69.Expect 实现 SSH 免交互执行命令

    • 70.监控 httpd 的进程数,根据监控情况做相应处理

    • 71.批量修改服务器用户密码

    • 72.iptables 自动屏蔽访问网站频须繁的IP

    • 73.根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁

    • 74.判断用户输入的是否为IP地址

    • 76.轮询检测Apache状态并启用钉钉报警

    • 77.一台监控主机,一台被监控主机。被监控主机分区使用率大于80%,就发告警部邮件。放到crontab里面,每10分钟执行一次。

    • 78.监控主机的磁盘空间,当使用空间超过90%就通过发mail 来发警告

    • 79.自动ftp上传

    • 80.mysqlbak.sh备份数据库目录脚本

    • 81.打印彩虹

    • 82.打印菱形

    • 83.expect实现远程登陆自动交互

    • 84.http心跳检测

    • 85.PV过量自动实现防火墙封IP

    • 86.shellI实现自动安装

    • 87.shell实现插入排序

    • 88.bash实现动态进度条

    • 89.根据文件内容创建账号

    • 90. 红色进度条

    • 91.监控服务器网卡流量

    • 92.检测CPU剩余百分比

    • 93.检测磁盘剩余空间

    • 94.bash-实现检测apache状态并钉钉报警

    • 95.内存检测

    • 96.剩余inode检测

    • 97.判断哪些用户登陆了系统

    • 98.批量创建账号

    • 99.批量扫面存活

    • 100.正则匹配IP

    • 101.正则匹配邮箱

    • 102.实现布片效果

    • 103.剔除白名单以外的用户

    • 104.一键安装 MongoDB 数据库脚本

    • 105.使用mobaXtrem显示CentOS上的图形工具

    • 106.一键申请多个证书 shell 脚本

    • 107.基于CentOS一键编译安装Redis脚本

    • 108.基于CentOS一键安装tomcat脚本

    • 109.一键证书申请和颁发脚本

    注:资料整理自网络,仅作免费交流分享,侵删

    完整pdf如何获取?

    3b92303534b0db9eec4ae012fb66bb54.png

    扫描上方二维码

    备注“109shell”即可免费领取

    展开全文
  • bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again Shell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。 bash是大多数Linux系统以及Mac OS X默认的shell,它...
  • 今天主要分享5个shell脚本实例,大家可以借鉴下里面的思路,看下有没另外一种实现方式。 1、定时清空文件内容,定时记录文件大小 #!/bin/bash ################################################################ #...
  • 想学习linux系统,shell很重要,这个是很好的shell学习资源!大家一起学习!
  • Linux 在Shell脚本中使用函数实例详解 Shell的函数 Shell程序也支持函数。函数能完成一特定的功能,可以重复调用这个函数。 函数格式如下: 函数名() { 函数体 }  函数调用方式: 函数名 参数列表  实例:编写...
  • python调用bash shell脚本

    千次阅读 2021-12-28 23:03:02
    python调用shell命令和脚本

    1. os.system()

    help(os.system)

    1.1. demo

    #os.system(command):该方法在调用完shell脚本后,返回一个16位的二进制数,
    #低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,
    #即脚本中exit 1的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,
    #则函数的返回值是0x0100,换算为十进制得到256。
    #要获得os.system的正确返回值,可以使用位移运算(将返回值右移8位)还原返回值:
    >>> import os
    >>> os.system("./test.sh")
    hello python!
    hello world!
    256
    >>> n>>8
    1
    
    

    2. os.popen()

    help(os.system)

    2.1 demo

    #os.popen(command):这种调用方式是通过管道的方式来实现,函数返回一个file对象,
    #里面的内容是脚本输出的内容(可简单理解为echo输出的内容),使用os.popen调用test.sh的情况
    
    >> import os
    >>> os.popen("./test.sh")
    <open file './test.sh', mode 'r' at 0x7f6cbbbee4b0>
    >>> f=os.popen("./test.sh")
    >>> f
    <open file './test.sh', mode 'r' at 0x7f6cbbbee540>
    >>> f.readlines()
    ['hello python!\n', 'hello world!\n']
    
    

    3. commands模块

    (1)commands.getstatusoutput(cmd),其以字符串的形式返回的是输出结果和状态码,即(status,output)。
    (2)commands.getoutput(cmd),返回cmd的输出结果。
    (3)commands.getstatus(file),返回ls -l file的执行结果字符串,调用了getoutput,不建议使用此方法

    4. subprocess

    subprocess模块,允许创建很多子进程,创建的时候能指定子进程和子进程的输入、输出、错误输出管道,执行后能获取输出结果和执行状态。
    (1)subprocess.run():python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。
    (2)subprocess.call():执行指定的命令, 返回命令执行状态, 功能类似os.system(cmd)。
    (3)subprocess.check_call():python2.5中新增的函数, 执行指定的命令, 如果执行成功则返回状态码, 否则抛出异常。
    说明:subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)
    subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
    subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
    args:表示shell指令,若以字符串形式给出shell指令,如"ls -l “则需要使shell = Ture。否则默认已数组形式表示shell变量,如"ls”,"-l"。
    当使用比较复杂的shell语句时,可以先使用shlex模块的shlex.split()方法来帮助格式化命令,然后在传递给run()方法或Popen。

    4.1 demo

    # Stubs for subprocess
    
    # Based on http://docs.python.org/2/library/subprocess.html and Python 3 stub
    
    from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Union, Optional, List, Text
    
    _FILE = Union[None, int, IO[Any]]
    _TXT = Union[bytes, Text]
    _CMD = Union[_TXT, Sequence[_TXT]]
    _ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]]
    
    # Same args as Popen.__init__
    def call(args: _CMD,
         bufsize: int = ...,
         executable: _TXT = ...,
         stdin: _FILE = ...,
         stdout: _FILE = ...,
         stderr: _FILE = ...,
         preexec_fn: Callable[[], Any] = ...,
         close_fds: bool = ...,
         shell: bool = ...,
         cwd: _TXT = ...,
         env: _ENV = ...,
         universal_newlines: bool = ...,
         startupinfo: Any = ...,
         creationflags: int = ...) -> int: ...
    
    def check_call(args: _CMD,
            bufsize: int = ...,
            executable: _TXT = ...,
            stdin: _FILE = ...,
            stdout: _FILE = ...,
            stderr: _FILE = ...,
            preexec_fn: Callable[[], Any] = ...,
            close_fds: bool = ...,
            shell: bool = ...,
            cwd: _TXT = ...,
            env: _ENV = ...,
            universal_newlines: bool = ...,
            startupinfo: Any = ...,
            creationflags: int = ...) -> int: ...
    
    # Same args as Popen.__init__ except for stdout
    def check_output(args: _CMD,
             bufsize: int = ...,
             executable: _TXT = ...,
             stdin: _FILE = ...,
             stderr: _FILE = ...,
             preexec_fn: Callable[[], Any] = ...,
             close_fds: bool = ...,
             shell: bool = ...,
             cwd: _TXT = ...,
             env: _ENV = ...,
             universal_newlines: bool = ...,
             startupinfo: Any = ...,
             creationflags: int = ...) -> bytes: ...
    
    PIPE = ... # type: int
    STDOUT = ... # type: int
    
    class CalledProcessError(Exception):
      returncode = 0
      # morally: _CMD
      cmd = ... # type: Any
      # morally: Optional[bytes]
      output = ... # type: Any
    
      def __init__(self,
             returncode: int,
             cmd: _CMD,
             output: Optional[bytes] = ...) -> None: ...
    
    class Popen:
      stdin = ... # type: Optional[IO[Any]]
      stdout = ... # type: Optional[IO[Any]]
      stderr = ... # type: Optional[IO[Any]]
      pid = 0
      returncode = 0
    
      def __init__(self,
             args: _CMD,
             bufsize: int = ...,
             executable: Optional[_TXT] = ...,
             stdin: Optional[_FILE] = ...,
             stdout: Optional[_FILE] = ...,
             stderr: Optional[_FILE] = ...,
             preexec_fn: Optional[Callable[[], Any]] = ...,
             close_fds: bool = ...,
             shell: bool = ...,
             cwd: Optional[_TXT] = ...,
             env: Optional[_ENV] = ...,
             universal_newlines: bool = ...,
             startupinfo: Optional[Any] = ...,
             creationflags: int = ...) -> None: ...
    
      def poll(self) -> int: ...
      def wait(self) -> int: ...
      # morally: -> Tuple[Optional[bytes], Optional[bytes]]
      def communicate(self, input: Optional[_TXT] = ...) -> Tuple[Any, Any]: ...
      def send_signal(self, signal: int) -> None: ...
      def terminate(self) -> None: ...
      def kill(self) -> None: ...
      def __enter__(self) -> 'Popen': ...
      def __exit__(self, type, value, traceback) -> bool: ...
    
    # Windows-only: STARTUPINFO etc.
    
    STD_INPUT_HANDLE = ... # type: Any
    STD_OUTPUT_HANDLE = ... # type: Any
    STD_ERROR_HANDLE = ... # type: Any
    SW_HIDE = ... # type: Any
    STARTF_USESTDHANDLES = ... # type: Any
    STARTF_USESHOWWINDOW = ... # type: Any
    CREATE_NEW_CONSOLE = ... # type: Any
    CREATE_NEW_PROCESS_GROUP = ... # type: Any
    

    在这里插入图片描述

    5. 参考文献

    https://www.jb51.net/article/186301.htm

    展开全文
  • 实现自动清除日期目录shell脚本实例代码 很多时候备份通常会使用到基于日期来创建文件夹,对于这些日期文件夹下面又有很多子文件夹,对于这些日期文件整个移除,通过find结合rm或者delete显得有些力不从心。本文提供...
  • 下面小编就为大家带来一篇python 捕获 shell/bash 脚本的输出结果实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Shell脚本编程详解-吐血共享.pdf
  • shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货: #!/bin/sh ps -fe|grep processString |grep -v grep if [ $? -ne 0 ] then echo start process..... else echo runing..... fi ##### ...
  • 教程名称:Linux Shell命令行及脚本编程实例详解课程目录:【】第1章Linux及LinuxShell简介【】第2章初识LinuxShell【】第3章常用ShellBash)【】第4章Shell命令进阶【】第5章Shell编程基础【】第6章Shell的条件...
  • 帮图灵翻译过这本书,英文原版的电子版就留在我手里了。 这本书的中文版即将上市,英文版国内应该没有
  • 一般的shell脚本的调试基本都是echo 来处理遇到比较大的脚本的时候,就比较麻烦了,出了问题,还不是很好定位哪行代码出问题了。其实shell内置的一些变量可以很好的解决这个问题: $LINENO $FUNCNAME $BASH_LINENO ...
  • 本节内容:监控mysql主从复制的shell脚本。 说明:监控脚本在 rhel5 下测试正常,其它版本的linux 系统请自行测试,需要的一些准备工作可以查看这篇文章 代码: 代码如下:#监控mysql 主从复制cat chk_mysql_rep.sh ...
  • Bash Shell脚本中的数组使用实例

    千次阅读 2021-05-23 05:42:39
    UnixShell=("${Unix[@]}" "${Shell[@]}") echo ${UnixShell[@]} echo ${#UnixShell[@]} 以下为输出: [root@localhost ~]# ./arraymain.sh Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh ...

    声明一个数组,括号中的所有元素都是数组的元素。

    上面的示例返回第三、第四个索引的值。索引始终以零开头。

    注意,该数组替换,不会写入到数组里面。

    在名为Unix的数组中,元素“ AIX”和“ HP-UX”分别添加在第7个索引和第8个索引中。并输出所有数组元素。

    以下示例显示了从数组中完全删除元素的一种方法,下面还是删除索引为1的元素。

    在此示例中,${Unix[@]:0:$pos}值获取第1个索引的元素,,而${Unix[@]:$(($pos + 1))}将从第3个索引到最后一个索引。并合并以上两个输出。这是从数组中删除元素的解决方法之一。

    上面的示例中删除了包含"Red"字符的元素。实际是将"Red*"替换为空字符。

    该实例同时打印数组“ Unix”和“ Shell”数组的元素,并且新数组的元素数为14个。

    数组之后,其长度将为零,如上所示。

    在上面的示例中,使用for循环,逐一显示文件中每行的内容。

    数组是一个包含多个值的变量,这些值可以是相同类型或不同类型。没有数组大小限制,也没有要求成员变量被连续索引或连续分配的限制。数组索引从0开始。

    1.声明一个数组并赋值

    在bash中,使用以下格式的变量时会自动创建数组:

    name[index]=value

    name 是数组的名字。

    index 可以是任何数字或表达式,值必须等于或大于零。

    要访问数组元素,请使用大括号,例如${name[index]}。下面是访问Unix数组中的第二个元素,以为数组索引从0开始,所以就是第二个元素了。

    Unix[1]

    [root@localhost ~]# cat arraymanip.sh

    #! /bin/bash

    Unix[0]='Debian'

    Unix[1]='Red hat'

    Unix[2]='Ubuntu'

    Unix[3]='Suse'

    echo ${Unix[1]}

    执行脚本,以下是输出内容:

    [root@localhost ~]# ./arraymain.sh

    Red hat

    8a202f2cfff01d7f508e46ae8f064eb6.png

    2.在声明期间初始化数组

    不必单独初始化数组的每个元素,可以通过使用括号指定元素列表(由空格分隔)来声明和初始化数组。下面是语法:

    declare -a arrayname=(element1 element2 element3)

    如果元素具有空格字符,需要使用引号:

    [root@localhost ~]# cat arraymain2.sh

    #! /bin/bash

    declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora')

    echo ${Unix[4]}

    下面是输出结果:

    [root@localhost ~]# ./arraymain2.sh

    Fedora

    84d4c715945002aacd5f1fabadeda5bd.png

    declare -a

    3.打印整个数组

    有多种方法可以打印整个数组。如果索引号是,则引用数组的所有成员。可以使用bash shell中的循环语句遍历数组元素并进行打印。

    @ 或者 *

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix[0]='Debian'

    Unix[1]='Red hat'

    Unix[2]='Ubuntu'

    Unix[3]='Suse'

    echo ${Unix[@]}

    下面是输出结果:

    [root@localhost ~]# ./arraymain.sh

    Debian Red hat Ubuntu Suse

    87ed5c239e88521b91cca3d175304220.png

    4.获取数组的长度

    可以使用的特殊参数来获取数组的长度。可以获取数组长度。

    $和#

    ${#arrayname[@]}

    [root@localhost ~]# cat arraymain2.sh

    #! /bin/bash

    declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora')

    echo ${#Unix[@]} #数组中元素的数量

    echo ${#Unix} #数组中第一个元素的字符数。

    下面是输出,可以看到第一行输出参数为5个。第二行输出第一个元素的字符数量是6个。

    [root@localhost ~]# ./arraymain2.sh

    5

    6

    90d88c2bfdc3b4e00dec901506b6ec7a.png

    5.数组中某个元素的长度

    ${#arrayname[n]} 给出数组中的n个元素的长度。

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix[0]='Debian'

    Unix[1]='Red hat'

    Unix[2]='Ubuntu'

    Unix[3]='Suse'

    echo ${#Unix[3]} #位于索引3的元素的长度。

    以下是输出,可以看到输出index为3的值为"Suse"的字符长度是4。

    [root@localhost ~]# ./arraymain.sh

    4

    6d7c830ba371f678a2a03ab4e3deb99d.png

    6.按数组的偏移量和长度提取

    下面的示例显示了从名为Unix的数组中从索引位置3开始提取2个元素的方法。

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')

    echo ${Unix[@]:3:2}

    以下是输出,

    [root@localhost ~]# ./arraymain.sh

    Suse Fedora

    a7f447490e28133944885f0cf9348604.png

    7.对于数组的特定元素,使用offset和length提取

    从数组元素中仅提取前四个元素。例如,获取数组中的第二个元素,并且获取这个元素的前三个字符:

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')

    echo ${Unix[1]:0:3}

    以下是输出:

    [root@localhost ~]# ./arraymain.sh

    Red

    bb4e6ada47ae5f84a754924ec5a3a37b.png

    8.搜索并替换数组元素

    下面的示例在数组中搜索Ubuntu,并将其替换为单词“FreeBSD”。

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')

    echo ${Unix[@]/Ubuntu/FreeBSD}

    以下是输出:

    [root@localhost ~]# ./arraymain.sh

    Debian Red hat FreeBSD Suse Fedora UTS OpenLinux

    [root@localhost ~]#

    aeafcff6c3cd803cbc0d2102e648d590.png

    9.向现有的数组添加元素

    以下示例显示了将元素添加到现有数组的方法。

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')

    Unix=("${Unix[@]}" "AIX" "HP-UX")

    echo ${Unix[@]}

    以下是输出:

    [root@localhost ~]# ./arraymain.sh

    Debian Red hat Ubuntu Suse Fedora UTS OpenLinux AIX HP-UX

    1383a842996797f0923109c18fc02422.png

    10.从数组中删除一个元素

    用于从数组中删除元素。unset和分配给元素“Null"值具有相同的效果。

    unset

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')

    unset Unix[1]

    echo ${Unix[@]}

    echo ${Unix[1]}

    以下为输出:

    [root@localhost ~]# ./arraymain.sh

    Debian Ubuntu Suse Fedora UTS OpenLinux

    上面的脚本将打印整个数组,还有索引为"1"的值,索引为“1”的值是null。

    c3aea7c3ae88fe0dd32c785c60910a60.png

    [root@localhost ~]# cat arraymain.sh

    #! /bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')

    pos=1

    Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))})

    echo ${Unix[@]}

    以下为输出:

    [root@localhost ~]# ./arraymain.sh

    Debian Ubuntu Suse Fedora UTS OpenLinux

    615902dfdbedabedce516bbc89e79041.png

    11.使用正则表达式删除数组中的元素

    在搜索条件中,可以给出正则表达式,并将剩余的元素存储到另一个数组中,如下所示。

    [root@localhost ~]# cat arraymain2.sh

    #! /bin/bash

    declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora')

    declare -a pattern=( ${Unix[@]/Red*/} )

    echo ${pattern[@]}

    以下为输出:

    [root@localhost ~]# ./arraymain2.sh

    Debian Ubuntu Suse Fedora

    235da0f8272ee40b253081fc2ea38a99.png

    12.复制数组

    以下实例是将Unix数组复制到Linux数组中:

    [root@localhost ~]# cat arraymain.sh

    #!/bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')

    Linux=("${Unix[@]}")

    echo ${Linux[@]}

    以下为输出:

    [root@localhost ~]# ./arraymain.sh

    Debian Red hat Ubuntu Suse Fedora UTS OpenLinux

    29526664fcf9ecc4d0a0fe862f177c15.png

    13.两个数组的关联

    展开两个数组的元素,然后将其分配给新数组:

    [root@localhost ~]# cat arraymain.sh

    #!/bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

    Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

    UnixShell=("${Unix[@]}" "${Shell[@]}")

    echo ${UnixShell[@]}

    echo ${#UnixShell[@]}

    以下为输出:

    [root@localhost ~]# ./arraymain.sh

    Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh

    14

    9617f6dd01d0da47a5d1c9dcb1a74340.png

    14.删除整个数组

    unset用于删除整个数组。

    [root@localhost ~]# cat arraymain.sh

    #!/bin/bash

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

    Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

    UnixShell=("${Unix[@]}" "${Shell[@]}")

    unset UnixShell

    echo ${#UnixShell[@]}

    以下为输出:

    [root@localhost ~]# ./arraymain.sh

    0

    ece15c4f68223acb9c9b17458018d219.png

    unset

    15.将文件内容加载到数组中

    您可以将文件内容逐行加载到数组中。

    [root@localhost ~]# cat loadcontent.sh

    #!/bin/bash

    file=(`cat ./pic.txt`)

    for i in "${file[@]}"

    do

    echo $i

    done

    echo -e "\033[31m Read file content! \033[0m"

    以下为输出:

    [root@localhost ~]# ./loadcontent.sh

    https://www.linuxprobe.com/wp-content/uploads/2021/01/windows7.png

    https://www.linuxprobe.com/wp-content/uploads/2016/12/bigdata.jpg

    https://www.linuxprobe.com/wp-content/uploads/2021/01/write-games-and-learn-python.jpg

    https://www.linuxprobe.com/wp-content/uploads/2021/01/data-center-inspection.jpg

    https://www.linuxprobe.com/wp-content/uploads/2020/03/devolop-like-linux-09.jpg

    Read file content!

    23db341021ed922e79fd28f9e74e39e8.png

    总结

    数组是一个包含多个值的变量,这些值可以是相同类型或不同类型。没有数组大小限制,也没有要求成员变量被连续索引或连续分配的限制。数组索引从0开始。

    本文原创地址:https://www.linuxprobe.com/shell-array-example.html

    展开全文
  • Shell的名字 $0第一个参数 $1第二个参数 $2第n个参数 $n所有参数 $@ 或 $*参数个数 $# shift默认是shift 1以下边为例: 代码如下:cat shift.sh#—————————-输出文字-开始—————————-#!/bin/...
  • git bash shell 脚本 :从文件获取git仓库列表 git clone所有仓库
  • 一些简单的shell脚本实例

    万次阅读 多人点赞 2019-05-04 22:10:09
    /bin/bash # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了, # 猜小了或猜大了,直至用户猜对脚本结束。 # RANDOM 为系统自带的系统变量,值为 0‐32767的随机数 # 使用取余算法...
  • Linux——shell脚本实例进阶篇

    万次阅读 多人点赞 2018-06-29 10:37:54
    实验一 利用case语句编写脚本,满足下列要求 1.执行create时根据userfile和passfile建立用户 2.执行delete时根据userfile删除用户 .../bin/bash read -p &quot;Please input the operation (create or...
  • 本书详细描述了Linux命令行和shell脚本编程,有助于初学者学习linux。
  • Linux 运维常用 shell 脚本实例

    千次阅读 2021-02-26 15:07:33
    1、用shell脚本批量建立Linux用户 实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码! 脚本实现如下: #!/bin/bash for i in `seq 1 50` do useradd -G student...
  • 多方查找发现Shell脚本中的Java命令需要引入环境变量方可正常执行。因此做了一下修改,脚本如下(仅供参考): 1、crontab执行配置 * * * * * cd /项目目录 && ./auto_start.sh >> /log/auto.out 2、Shell脚本 #!/...
  • 如果跟shell脚本打交道,遍历一个时间范围是很常见的事情,那么今天就跟大家分享一下: 代码如下: #!/usr/bin/env bash date1=”$1″ date2=”$2″ echo “date1: $date1” echo “date2: $date2” tempdate=`date ...
  • 以前我们出于不同的目的需要写很多个 bash 脚本。 现在我们写一个新的 shell 脚本,在每次登录到 shell 时显示需要的系统信息。 这个j脚本有 6 部分,细节如下: 通用系统信息 CPU/内存当前使用情况 硬盘使用率...
  • 下面用shell写一个脚本,放置在当前目录下,执行即可。 代码如下:  #!/bin/bash   #脚本名称 dir #定义一个函数fun_directory   fun_directory() {   let “filenum=0”  let “dirnum=0”   for i in $( ls...
  • 在学习的时候,经常要切换到固定的文件夹,于是写了个shell脚本用cd命令切换却发现目录切换不了。 代码如下: #! /bin/bash # c.sh cd /mnt/hgfs/vmshare pwd 解释:执行的时候是./c.sh来执行的,这样执行的话终端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,995
精华内容 14,798
关键字:

bash shell脚本实例