3天玩转shell--10.shell编程技巧汇总

简介: 本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。

一、这节课掌握如下几个知识点

【1】分享shell编程中的一些小技巧、以及一些巧妙的使用方法。
【2】通过该次分享能在使用过程避免一些坑。

二、代码讲解

本节主要讲解在shell中涉及的加减乘除、时间等相关运算。
#!/bin/bash
#10.sh v1
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
export LANG=zh_CN.UTF-8
export PATH

#1.随机数的获取,随机小数、随机数字、随机字符串
 #随机小数,使用场景:需要进行随机延迟处理的情况  
rds=$(echo "0.`tr -dc 0-9 </dev/urandom |head -c 3`")
echo $rds

#随机数字范围,使用场景:用于取随机小时或分,然后任务在指定的小时或分钟去执行
function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(($RANDOM+$RANDOM))
    echo $(($num%$max+$min))  
}
sss=$(rand 0 60)
dd=$(date +%M)
if [[ 10#$dd -eq $sss ]];then
   echo "run"
fi

#取20位数字 使用场景:随机生成密码
head  /dev/urandom  |  tr -dc 0-9  | head -c 20

#取20位包含数字、大小写的字符串,使用场景:随机生成密码
head  /dev/urandom  |  tr -dc A-Za-z0-9  | head -c 20

#2.IP的获取和正则匹配
Ip=$(ifconfig | awk '/inet /{sub(/addr:/,"",$2);print $2}'|grep -v "127.0.0.1")
echo $Ip|grep -P '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$'

#3.编码转换处理,使用场景:将utf-8编码的文件转成gbk编码,反之亦可,适用在Linux终端是gbk编码需要处理utf8编码下的中文字符
     iconv -f UTF-8 -t GBK file1 >file2
     iconv -f GBK -t UTF-8 file1 >file2

#4.将windows下编写的脚本放到linux运行时需要执行此命令转成linux格式的文件。
    dos2unix test.sh

#5.curl使用,使用场景:在使用curl的情况下加上超时可以避免curl进程被长期挂住的情况,加上-s参数可以不打印文件下载的过程
     curl -s --connect-timeout 5 --max-time 10
-s:静默模式
--connect-timeout:连接超时
--max-time:最大下载时间

#6.wget使用
/usr/bin/wget -N -c -t 3 -T 60 -P
-N:表示文件有更新就进行下载
-c:用于断点续传
-t :   重试3次
-T:超时60秒
-P:下载之后存放的目录

#7.EOF处理大段字符输出,或者用于注释脚本
cat >> /etc/xx.conf <<"EOF"
/etc/
/data/PRG/*/etc
/data/PRG/*/conf
/data/PRG/*/config
/var/
/var/spool/cron/
/usr/local/etc/
/usr/etc/
EOF

#可用于注释一段shell代码
:<<EOF
    echo "yes"
    echo "yes"
EOF

#8.脚本执行的唯一性,使用场景:防止脚本同时执行
if [ -s /tmp/.run.tag ];then
  lastrunt=$(head -1 /tmp/.run.tag)
  ttimes=$(( ${Timestamp:0:10} - $lastrunt ))
  if [[ 10#$ttimes -ge 180 ]] || [[ 10#$ttimes -lt 0 ]];then  #避免进程意外退出导致tag标签遗留
     rm -f /tmp/.run.tag
  fi
  echo "`date +"%Y-%m-%dT%H:%M:%S"` [ERROR] task already run" >>$logfile 2>&1
  exit 0
fi
echo "${Timestamp:0:10}" >/tmp/.run.tag

#9.获取脚本执行的路径,使用场景:可以增加脚本的通用型,将脚本放于任何目录都可以执行。
ROOT=$(cd "$(dirname "$0")"; pwd) #获取脚本所在路径

#10.掌握find,xargs、vim、iptables等重要命令,处理任务起来半功倍。

#11.jq命令,使用场景:在Linux 终端解析json字符串的最佳命令

#12.命令执行超时,高版本Linux系统会有timeout命令,低版本系统只能通过脚本实现。为了避免某个操作出现异常时不被长期挂起,需要在执行的命令前面加上超时。
function TimeOut() {
   waitsec=10
   ( $* ) & pid=$!
   ( sleep $waitsec && kill -HUP $pid ) 2>/dev/null & watchdog=$!
   if wait $pid 2>/dev/null; then
      pkill -HUP -P $watchdog
      wait $watchdog
   fi
}

#13.shell中的进制,在shell中遇到 0开头的数字,默认会以八进制来计算,也就是说到8时就会溢出,正确用法是在变量前用10#。
dd=$(date +%M)
if (( 10#$dd % 2 == 0 ));then
   echo "run"
fi

#14.while 循环中,通过管道符传入数据的循环中定义的变量的作用域只限于循环内。
cat 4.example.txt|while read ip name
    do
       total=$[total+1]
       echo "$ip $name"
    done
    echo "all:$total"
#解决方法:done < 4.example.txt

15.在执行ping检测时,为了方便记录ping的检测结果,在ping的结果上加时间戳 
ping 192.168.239.43 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }' >> ping.log &
相关文章
|
Shell Linux
Linux Shell 进阶:探索高级命令和脚本编程技巧
Linux Shell不仅仅是一个命令解释器,它还提供了许多强大的高级命令和脚本编程技巧,能够帮助用户更高效地管理系统和处理数据。在这篇文章中,我们将深入探讨Linux Shell的高级功能。
227 0
|
7月前
|
Shell Linux C语言
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
228 0
|
弹性计算 Shell 测试技术
3天玩转shell--8.awk编程技巧二
本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。
132 0
|
弹性计算 Shell Linux
3天玩转shell--7.awk编程技巧一
本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。
114 0
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
86 1
|
29天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
53 2
6种方法打造出色的Shell脚本
|
15天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
43 1
|
20天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
40 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
49 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。