shell脚本一百例

本文介绍了30个实用的Shell脚本示例,涵盖僵尸进程查找、判断闰年、生成随机密码、用户登录验证、文件下载、进程管理、系统信息获取等多个方面,展示了Shell脚本在日常系统管理和自动化任务中的强大功能。
摘要由CSDN通过智能技术生成
  1. 查找 Linux 系统中的僵尸进程
    #!/bin/bash
    #awk 判断 ps 命令输出的第 8 列为 Z 是,显示该进程的 PID 和进程命令
    ps aux |awk ‘{if($8 == “Z”){print $2,$11}}’
  2. 提示用户输入年份后测试判断是否为闰年
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    #能被 4 整除并且并 100 整除的年是闰年
    #能被 400 整除的年也是闰年
    read -p “请输入一个年份:” year
    if [ “KaTeX parse error: Expected 'EOF', got '#' at position 41: …有输入年份" exit fi #̲使用正则测试变量 year 中…year” =~ [a-Z] ]];then
    echo “你输入的不是数字”
    exit
    fi
    if [ $[year % 4] -eq 0 ] && [ [ y e a r e c h o " [year % 100] -ne 0 ];then echo " [yearecho"year 是闰年"
    elif [ [ y e a r e c h o " [year % 400] -eq 0 ];then echo " [yearecho"year 是闰年"
    else
    echo “$year 不是闰年”
    fi
  3. 生成随机密码(urandom 版本)
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    #/dev/urandom 文件是 Linux 内置的随机设备文件
    #cat /dev/urandom 可以看看里面的内容,ctrl+c 退出查看
    #查看该文件内容后,发现内容有些太随机,包括很多特殊符号,我们需要的密码不希望使用这些符号
    #tr -dc ‘_A-Za-z0-9’ </dev/urandom
    #该命令可以将随机文件中其他的字符删除,仅保留大小写字母,数字,下划线,但是内容还是太多
    #我们可以继续将优化好的内容通过管道传递给 head 命令,在大量数据中仅显示头 10 个字节
    #注意 A 前面有个下划线
    tr -dc ‘_A-Za-z0-9’ </dev/urandom | head -c 10
  4. 生成随机密码(子串截取版本)
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    #设置变量 key,存储密码的所有可能性(密码库),如果还需要其他字符请自行添加其他密码字符
    #使用KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲统计密码库的长度 key="0…{#key}
    #设置初始密码为空
    pass=’’
    #循环 8 次,生成 8 为随机密码
    #每次都是随机数对密码库的长度取余,确保提取的密码字符不超过密码库的长度
    #每次循环提取一位随机密码,并将该随机密码追加到 pass 变量的最后
    for i in {1…8}
    do
    index= [ R A N D O M p a s s = [RANDOM%num] pass= [RANDOMpass=passKaTeX parse error: Expected '}', got 'EOF' at end of input: {key:index:1}
    done
    echo $pass
  5. 生成随机密码(UUID 版本,16 进制密码) #!/bin/bash
    uuidgen
  6. 生成随机密码(进程 ID 版本,数字密码)
    #!/bin/bash
    echo $$
  7. 测试用户名与密码是否正确
    #!/bin/bash
    #用户名为 tom 并且密码为 123456,则提示登录成功,否则提示登录失败
    read -p “请输入用户名:” user
    read -p “请输入密码:” pass
    if [ “ u s e r " = = ′ t o m ′ − a " user" == 'tom' -a " user"==toma"pass” == ‘123456’ ];then
    echo “Login successful”
    else
    echo “Login Failed”
    fi
  8. 循环测试用户名与密码是否正确
    #!/bin/bash
    #循环测试用户的账户名和密码,最大测试 3 次,输入正确提示登录成功,否则提示登录失败
    #用户名为 tom 并且密码为 123456
    for i in {1…3}
    do
    read -p “请输入用户名:” user
    read -p “请输入密码:” pass
    if [ “ u s e r " = = ′ t o m ′ − a " user" == 'tom' -a " user"==toma"pass” == ‘123456’ ];then
    echo “Login successful”
    exit
    fi
    done
    echo “Login Failed”
  9. Shell 脚本的 fork 炸弹
    #!/bin/bash
    #快速消耗计算机资源,致使计算机死机
    #定义函数名为.(点), 函数中递归调用自己并放入后台执行
    .() { .|.& };.
  10. 批量下载有序文件(pdf、图片、视频等等)
    #!/bin/bash
    #本脚本准备有序的网络资料进行批量下载操作(如 01.jpg,02.jpg,03.jpg) #设置资源来源的域名连接
    url=“http://www.test.com/”
    echo “开始下载…”
    sleep 2
    type=jpg
    for i in seq 100
    echo “正在下载 i . i. i.type”
    curl u r l / url/ url/i. t y p e − o / t m p / type -o /tmp/ typeo/tmp/{i}$type
    sleep 1
    done
    #curl 使用-o 选项指定下载文件另存到哪里.
  11. 显示当前计算机中所有账户的用户名称
    #!/bin/bash
    #下面使用 3 中不同的方式列出计算机中所有账户的用户名
    #指定以:为分隔符,打印/etc/passwd 文件的第 1 列
    awk -F: ‘{print $1}’ /etc/passwd
    #指定以:为分隔符,打印/etc/passwd 文件的第 1 列
    cut -d: -f1 /etc/passwd
    #使用 sed 的替换功能,将/etc/passwd 文件中:后面的所有内容替换为空(仅显示用户名)
    sed ‘s/:.*//’ /etc/passwd
  12. 制定目录路径,脚本自动将该目录使用 tar 命令打包备份到/data 目录
    #!/bin/bash
    [ ! -d /data ] && mkdir /data
    [ -z $1 ] && exit
    if [ -d $1 ];then
    tar -czf /data/$1.-date +%Y%m%d.tar.gz $1
    else
    echo “该目录不存在”
    fi
  13. 显示进度条(回旋镖版)
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    while :
    do
    clear
    for i in {1…20}
    do
    echo -e “\033[3;KaTeX parse error: Undefined control sequence: \0 at position 58: …1} do echo -e "\̲0̲33[3;{i}H*”
    sleep 0.1
    done
    clear
    done
  14. 安装 LAMP 环境(yum 版本)
    #!/bin/bash
    #本脚本适用于 RHEL7(RHEL6 中数据库为 mysql)
    yum makecache &>/dev/null
    num=$(yum repolist |awk ‘/repolist/{print $2}’ |sed ‘s/,//’)
    if [ $num -lt 0 ];then
    yum -y install httpd
    yum -y install mariadb mariadb-server mariadb-devel
    yum -y install php php-mysql
    else
    echo “未配置 yum 源…”
    fi
  15. 循环关闭局域网中所有主机
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    #假设本机为 192.168.4.100,编写脚本关闭除自己外的其他所有主机
    #脚本执行,需要提前给所有其他主机传递 ssh 密钥,满足无密码连接
    for i in {1…254}
    do
    [ KaTeX parse error: Expected 'EOF', got '&' at position 13: i -eq 100 ] &̲& continue echo…i…"
    ssh 192.168.4.$i poweroff
    done
  16. 获取本机 MAC 地址
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    ip a s |awk ‘BEGIN{print “本机 MAC 地址信息如下:”}/1/{print $2;getline;if($0~/link/ether/){print
    $2}}’ |grep -v lo:
    #awk 读取 ip 命令的输出,输出结果中如果有以数字开始的行,先显示该行的地 2 列(网卡名称),
    #接着使用 getline 再读取它的下一行数据,判断是否包含 link/ether
    #如果保护该关键词,就显示该行的第 2 列(MAC 地址)
    #lo 回环设备没有 MAC,因此将其屏蔽,不显示
  17. 自动配置 rsynd 服务器的配置文件 rsyncd.conf
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    # See rsyncd.conf man page for more options.
    [ ! -d /home/ftp ] && mkdir /home/ftp
    echo ‘uid = nobody
    gid = nobody
    use chroot = yes
    max connections = 4
    pid file = /var/run/rsyncd.pid
    exclude = lost+found/
    transfer logging = yes
    timeout = 900
    ignore nonreadable = yes
    dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    [ftp]
    path = /home/ftp
    comment = share’ > /etc/rsyncd.conf
  18. 修改 Linux 系统的最大打开文件数量
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    #往/etc/security/limits.conf 文件的末尾追加两行配置参数,修改最大打开文件数量为 65536
    cat >> /etc/security/limits.conf <<EOF
  • soft nofile 65536
  • hard nofile 65536
    EOF
  1. 设置 Python 支持自动命令补齐功能
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    #Summary:Enable tab complete for python
    #Description:
    # Needs import readline and rlcompleter module
    # import readline
    # import rlcompleter
    # help(rlcompleter) display detail: readline.parse_and_bind(‘tab: complete’)
    # man python display detail: PYTHONSTARTUP variable
    if [ ! -f /usr/bin/tab.py ];then
    cat >> /usr/bin/tab.py <<EOF
    import readline
    import rlcompleter
    readline.parse_and_bind(‘tab: complete’)
    EOF
    fi
    sed -i ‘$a export PYTHONSTARTUP=/usr/bin/tab.py’ /etc/profile
    source /etc/profile
  2. 自动修改计划任务配置文件
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    read -p “请输入分钟信息(00-59):” min
    read -p “请输入小时信息(00-24):” hour
    read -p “请输入日期信息(01-31):” date
    read -p “请输入月份信息(01-12):” month
    read -p “请输入星期信息(00-06):” weak
    read -p “请输入计划任务需要执行的命令或脚本:” program
    echo “$min $hour $date $month $weak $program” >> /etc/crontab
  3. 使用脚本循环创建三位数字的文本文件(111-999 的文件)
    #!/bin/bash
    #Author:丁丁历险(Jacob)
    for i in {1…9}
    do<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值