Shell 脚本学习
创始人
2024-04-03 12:46:24
0

Shell 脚本学习

本文不详细讲解,理论和用法。希望通过几个Shell脚本案例快速上手Shell脚本的编写

文章目录

  • Shell 脚本学习
    • 参考
    • 基本使用方法
      • $...的作用
      • -...的作用
    • 案例
      • 文件读入数据实现赋值
      • 多进程测试网段中哪些主机处于开机状态
      • 查看有多少远程的IP在连接本机
      • 打印国际象棋棋盘
      • 模拟程序启动时选择模式
      • 获得任务运行的PID

参考

  • http://c.biancheng.net/view/942.html

基本使用方法

变量的声明

变量名=变量值

删除变量

unset 变量名

将命令的输出赋值给变量

变量名=`command`

与输入输出有关的文件描述

文件描述符文件名类型硬件
0stdin标准输入文件键盘
1stdout标准输出文件显示器
2stderr标准错误输出文件显示器

$…的作用

符号说明
$$Shell 本身的PID
$!Shell 最后运行的后台Process的PID
$?最后运行的命令的结束代码(返回值),即执行上一条指令的返回值(显示最后命令的退出状态。0表示没有错,其他任何值表明有错误)
$-使用Set命令设定Flag一览
$*所有参数列表
$@所有参数列表
$#添加到Shell 的参数个数
$0Shell本身的文件名
$1- $n添加到Shell的各参数值,序号表示第几个参数

-…的作用

文件表达

符号说明
-e filename如果filename存在,则为真
-d filename如果filename为目录,则为真
-ffilename 为常规未见,则为真
-Lfilename 为符号链接,则为真
-rfilename 可读,则为真
-wfilename 可写,则为真
-xfilename 可执行,则为真
-sfilename 文件长度不为0,则为真
-h如果文件是软链接,则为真

整数变量表达式

符号说明
-eq等于
-ne不等于
-gt大于
-ge大于等于
-lt小于
-le小于等于

案例

文件读入数据实现赋值

#! /bin/bash
ls *.c > execfile
while read LINE
dochmod +x ${LINE}
done

这个程序表明从execfile中读入数据,并将循环得到的每行数据赋值给变量LINE。然后将其中的每个以.c结尾的文件赋予可执行权限。

多进程测试网段中哪些主机处于开机状态

while 版本

#!/bin/bashclear_file(){cat /dev/null > iplog.txt
}i=1
MaxRange=20clear_file
while [ $i -le ${MaxRange} ]
do  ping -c 2 -i 0.3 -W 1 192.168.4.${i} &>/dev/nullif [ $? -eq 0 ];thenecho "192.168.4.${i}" >> iplog.txtelseecho "192.168.4.${i} is down"filet i++
done

这里比较费解的就是 $?,代表的其实就是上一条指令的返回值(显示最后命令的退出状态,0表示没有错误,其他任何值表明有错误)。

这样其实就好理解上面这段脚本的运作原理了。

多进程版本

#!/bin/bashclear_file(){cat /dev/null > iplog.txt
}i=1myping(){ping -c 2 -i 0.3 -W 1 $1 &>/dev/nullif [ $? -eq 0 ];thenecho "${1} is up"elseecho "${1} is down"fi
}for i in {1..20}
domyping 192.168.4.${i} &
done

使用&符号,将执行的函数放入后台执行

这样做的好处就是不需要等待ping第一台主机的回应,就可以继续并发ping第二台主机,依次类推。

可以观察运行的输出多进程版本明显快于单进程版本

查看有多少远程的IP在连接本机

#!/bin/bash#查看有多少远程的 IP 正在连接本机(不管是通过 ssh 还是 web 还是 ftp都统计)
#使用 ``netstat -atn`` 可以查看本机所有连接的状态,-a 查看所有
#-t 仅显示 tcp 连接的信息, -n 数字格式显示
#Local Address (第四列是本机的IP和端口信息)
#Foreign Address (第五列是远程主机的IP和端口信息)
#使用awk 命令仅显示第5列数据, 再显示第 1 列 IP 地址的信息
#sort 可以按数字大小排序,最后使用 uniq 将多余重复的删除,并统计重复的次数
netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr | uniq -c

打印国际象棋棋盘

#!/bin/bashprintChess(){#打印国际象棋棋盘#设置两个变量 i、j 分别代表行和列#棋盘的规则其实就是相邻的不同颜色#使用echo -ne 打印色块,并且打印完成色块后不自动换行,在同一行继续输出其他色块 for i in {1..8}dofor j in {1..8}dosum=$[i+j]if [ $[sum%2] -eq 0 ];thenecho -ne "\033[46m \033[0m"elseecho -ne "\033[47m \033[0m"fidoneechodone
}
printChess

image-20221103124235538

模拟程序启动时选择模式

#!/bin/bash# programRunning
checkNumber(){case $1 instart)echo "starting";;stop)echo "stoping";;test)echo "is testing";;*)echo "Usage: {start|stop}";;esac
}a=
read -p "please select option: " a
checkNumber $a

获得任务运行的PID

#!/bin/bashPID=
get_pid(){PID=`ps -ef | grep root | grep ywh | awk '{print $2}'`
}
get_pid
echo $PID

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...