Linux 下使用 Python + Shell 编写的简化命令行操作的程序,可快速无误创建cron计划任务,快速查看ip-mac等

这篇博客介绍了如何利用Python和Shell脚本简化Linux命令行操作,包括创建规范的cron计划任务和查看IP-MAC地址。通过提供的cmnd.py、ipaddr.sh和cronadd.sh三个脚本,用户可以更便捷地进行日常系统管理。文章末尾还展示了cmnd.py的多功能集成功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 发现Linux有些命令用起来不太方便,而且查看不直观,所以今天抽时间编写了一下Shell脚本,使用了Bash Shell + Python来实现了一些简单实用的功能,其中就包括了cron计划任务的创建,下面直接贴代码,这里有三个代码快文件:cmnd.py (调用shell脚本),ipaddr.sh(打印本机所有 IP-MAC 地址),cronadd.sh(计划任务创建);

其中计划任务创建的Shell代码较多,但编写完之后,创建计划任务非常规范和简便,可以拿来办公直接使用的!我在最后贴上cron计划任务的Shell脚本,也是非常有用的一个脚本

1. cmnd.py代码 (较简单):

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
os.system("echo \"[info]打印相关信息->[输入1:打印进程信息|2:打印ip地址|3:打印端口开启状况|4:创建计划任务]\"")
List1=["Y","n"]
a = input("[info]请输入操作号,exit为退出,按ENTER开始:")

if a == 1:
	os.system("top")
elif a == 2:
	os.system("./ipaddr.sh")
elif a == 3:
		portnum = input("请输入端口号:")
		str1 = "netstat -tulnp | grep :" + str(portnum)
		str2 = os.system(str1)
elif a == 4:
	os.system("./cronadd.sh")
elif a == exit:
	print '执行了退出操作...'
else:
	print '输入有误,正确的输入为[1|2|3|4|exit]'

'''
cmnd.py
'''

 

2. ipaddr.sh代码:

#!/bin/bash
DevName=$(ifconfig | grep "flags"| cut -d ':' -f1)
for dev in $(echo $DevName)
do	
	IPADDR=$(ifconfig $dev | grep -w "inet" | awk '{print $2}')
	NETMASK=$(ifconfig $dev | grep -w "netmask" | awk '{print $4}')
	MACADDR=$(ifconfig $dev | grep -w "ether" | awk '{print $2}')
	echo +---------------------+
	echo "网卡 $dev:"
	if [ -z "$IPADDR" ];then
		echo "IP地址信息:暂无"
	else
		echo "IP地址信息:$IPADDR"
	fi
	if [ -z "$NETMASK" ];then
		echo "NETMASK地址信息:暂无"
	else
		echo "NETMASK地址信息:$NETMASK"
	fi
	if [ -z "$MACADDR" ];then
		echo "MAC地址信息:暂无"
	else
		echo "MAC地址信息:$MACADDR"
		echo +---------------------+
	fi
done	

#ipaddr.sh

ipaddr.sh可单独运行,结果是打印出本机所有的ip信息,没有信息的地方会标记为 暂无:

+---------------------+
网卡 enpXsY:
IP地址信息:暂无
NETMASK地址信息:暂无
MAC地址信息:XX:XX:XX:XX:XX:XX
+---------------------+
+---------------------+
网卡 lo:
IP地址信息:127.0.0.1
NETMASK地址信息:255.0.0.0
MAC地址信息:暂无
+---------------------+
网卡 virbr0:
IP地址信息:192.168.122.1
NETMASK地址信息:255.255.255.0
MAC地址信息:XX:XX:XX:XX:XX:XX
+---------------------+
+---------------------+
网卡 wlpXsY:
IP地址信息:192.168.173.25
NETMASK地址信息:255.255.255.0
MAC地址信息:XX:XX:XX:XX:XX:XX
+---------------------+

3.cronadd.sh代码:

#!/bin/bash

#在使用程序前请务必茶看下面的cron计划任务的大体书写格式,
#当然我编写本程序限定了输入格式,错误的输入不会写入:

# 详细的信息请使用 man 4 crontabs 命令:

# Example of job definition:
# .---------------- minute (0 - 59) #这里格式还可以指定 */10 的格式
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

#[CODE START]

#命名计划任务:

CRON_DIR=/etc/cron.d/
read -p "创建计划任务名称:" cronname
CRON_NAME=$cronname
CRON_FILE=$CRON_DIR$CRON_NAME
echo "将创建 $CRON_FILE 文件,正在检查任务名称是否存在..."

#判断计划任务要创建的文件是否存在:

ls $CRON_FILE &> /dev/null

#文件存在后的操作:

while [ $? = 0 ];do
	read -p "计划任务名称已经存在,是否进行追加操作(输入yes or no)?" choice
	if [ $choice = "yes" ];then
		break
	elif [ $choice = "no" ];then
		read -p "请重新输入计划任务名称:" cronname
		CRON_NAME=$cronname
		CRON_FILE=$CRON_DIR$CRON_NAME
		ls $CRON_FILE &> /dev/null
	else 
		echo "选择不正确"
		ls $CRON_FILE &> /dev/null
	fi
done

#创建计划任务文件:

touch $CRON_FILE

str1=''
#判断分钟值的格式正确性:
while [ -z $str1  ];do
	read -p "请输入分钟:" cron_min
	if [ -z "$cron_min" ];then
		cron_min="*"
		break
	fi
	num=$(echo $cron_min | wc -L)
	if [ $num -eq 1 ];then
		str1=$(echo $cron_min | grep ^[0-9,*])
	elif [ $num -eq 2 ];then
		str1=$(echo $cron_min | grep ^[1-5,/][0-9])
		echo $cron_min | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			cron_min="*"$str1
		fi
	elif [ $num -eq 3 ];then
		echo $cron_min | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_min | grep ^[/][1-5][0-9])
			cron_min="*"$str1
		else
			str1=$(echo $cron_min | grep ^[0-9][-][0-9])
		fi
	elif [ $num -eq 4 ];then
		str1=$(echo $cron_min | grep ^[0-9][-][1-5][0-9])
	elif [ $num -eq 5 ];then
		str1=$(echo $cron_min | grep ^[1-5][0-9][-][1-5][0-9])
	else
		echo "输入的格式不正确,正确格式有:1-2 \| /10 \| /1 \| * \| 1-12 \| 35-59 等"
		str1=''
	fi
done

echo "cron_min:"$cron_min

#判断小时值的正确性:
str1=''
while [ -z $str1  ];do
	read -p "请输入小时:" cron_hour
	if [ -z "$cron_hour" ];then
		cron_hour="*"
		break
	fi
	num=$(echo $cron_hour | wc -L)
	if [ $num -eq 1 ];then
		str1=$(echo $cron_hour | grep ^[0-9,*])
	elif [ $num -eq 2 ];then
		str1=$(echo $cron_hour | grep ^[0-1,/][0-9])
		echo $cron_hour | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			cron_hour="*"$str1
		fi
		echo $cron_hour | grep ^[2] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_hour | grep ^[2][0-4])
		fi
	elif [ $num -eq 3 ];then
		echo $cron_hour | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_hour | grep ^[/][0-1][0-9])
			cron_hour="*"$str1
		else
			str1=$(echo $cron_hour | grep ^[0-9][-][0-9])
		fi
		echo $cron_hour | grep ^[/][2] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_hour | grep ^[/][2][0-4])
		fi
	elif [ $num -eq 4 ];then
		str1=$(echo $cron_hour | grep ^[0-9][-][1][0-9])
		echo $cron_hour | grep ^[0-9][-][2] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_hour | grep ^[0-9][-][2][0-4])
		fi
	elif [ $num -eq 5 ];then
		str1=$(echo $cron_hour | grep ^[1][0-9][-][1][0-9])
		echo $cron_hour | grep ^[1][0-9][-][2]
		if [ $? = 0 ];then
			str1=$(echo $cron_hour | grep ^[1][0-9][-][2][0-4])
		fi
		echo $cron_hour | grep ^[2]
		if [ $? = 0 ];then
			str1=$(echo $cron_hour | grep ^[2][0-4][-][2][0-4])
		fi
		
	else
		echo "输入的格式不正确,正确格式有:1-2 \| /10 \| /1 \| * \| 1-12 \| 10-23 等"
		str1=''
	fi
done


echo "cron_hour:"$cron_hour

#判断天数值的正确性:
str1=''
while [ -z $str1  ];do
	read -p "请输入天数:" cron_day
	if [ -z "$cron_day" ];then
		cron_day="*"
		break
	fi
	num=$(echo $cron_day | wc -L)
	if [ $num -eq 1 ];then
		str1=$(echo $cron_day | grep ^[1-9,*])
	elif [ $num -eq 2 ];then
		str1=$(echo $cron_day | grep ^[0-2,/][0-9])
		echo $cron_day | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			cron_day="*"$str1
		fi
		echo $cron_day | grep ^[3] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_day | grep [3][0-1])
		fi
	elif [ $num -eq 3 ];then
		echo $cron_day | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_day | grep ^[/][1-2][0-9])
			cron_day="*"$str1
		else
			str1=$(echo $cron_day | grep ^[1-9][-][1-9])
		fi
		echo $cron_day | grep ^[/][3] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_day | grep ^[/][3][0-1])
		fi
	elif [ $num -eq 4 ];then
		str1=$(echo $cron_day | grep ^[1-9][-][1-2][0-9])
		echo $cron_day | grep ^[1-9][-][3] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_day | grep [1-9][-][3][0-1])
		fi
	elif [ $num -eq 5 ];then
		str1=$(echo $cron_day | grep ^[1-2][0-9][-][1-2][0-9])
		echo $cron_day | grep ^[1-2][0-9][-][3]
		if [ $? = 0 ];then
			str1=$(echo $cron_day | grep ^[1-2][0-9][-][3][0-1])
		fi
		echo $cron_day | grep ^[3]
		if [ $? = 0 ];then
			str1=$(echo $cron_day | grep ^[3][0-1][-][3][0-1])
		fi
	else
		echo "输入的格式不正确,正确格式有:1-2 \| /10 \| /1 \| * \| 1-12 \| 18-28 等"
		str1=''
	fi
done

echo "cron_day:"$cron_day

#判断月份值的正确性:
str1=''
while [ -z $str1  ];do
	read -p "请输入月份:" cron_mon
	if [ -z "$cron_mon" ];then
		cron_mon="*"
		break
	fi
	num=$(echo $cron_mon | wc -L)
	if [ $num -eq 1 ];then
		str1=$(echo $cron_mon | grep ^[1-9,*])
	elif [ $num -eq 2 ];then
		str1=$(echo $cron_mon | grep ^[1,/][1-9])
		echo $cron_mon | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			cron_mon="*"$str1
		fi
		echo $cron_mon | grep ^[1] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_mon | grep ^[1][0-2])
		fi
	elif [ $num -eq 3 ];then
		echo $cron_mon | grep ^[/] &>/dev/null
		if [ $? = 0 ];then
			str1=$(echo $cron_mon | grep ^[/][1][0-2])
			cron_mon="*"$str1
		else
			str1=$(echo $cron_mon | grep ^[1-9][-][1-9])
		fi
	elif [ $num -eq 4 ];then
		str1=$(echo $cron_mon | grep ^[1-9][-][1][0-2])
	elif [ $num -eq 5 ];then
		str1=$(echo $cron_mon | grep ^[1][0-2][-][1][0-2])
	else
		echo "输入的格式不正确,正确格式有:1-2 \| 12 \| /10 \| /1 \| * \| 1-12 \| 10-11 等"
		str1=''
	fi
done

echo "cron_mon:"$cron_mon

#day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
echo "请输入星期(输入0-7任意一个数,1-6为星期一~星期六|星期日请输入0或7)"

str1=''
while [ -z $str1 ];do
	read -p "输入:" cron_week
	num=$(echo $cron_week | wc -L)
	if [ $num -eq 0 ];then
		cron_week="*"
		break
	elif [ $num -eq 1 ];then
		str1=$(echo $cron_week | grep ^[0-7,*])
		echo $cron_week | grep ^[0-7,*]
		if [ $? = 1 ];then
			echo "输入了不存在的星期,请重新输入"
		fi
	else
		echo "输入不正确,(输入0-7任意一个数,1-6为星期一~星期六|星期日请输入0或7),回车默认为*"
	fi
done
echo "cron_week:"$cron_week

str1=''

while [ -z $str1 ];do
	read -p "请输入用户名:" cron_user
	if [ -z $cron_user ];then
		break
	fi
	id $cron_user
	if [ $? = 0 ];then
		str1=$cron_user
	else
		echo "本地用户名不存在,请核对后再输入!"
	fi
done

str1=''
while [ -z "$str1" ];do
	read -p "请输入命令:" cron_cmnd
	if [ -z "$cron_cmnd" ];then
		echo "没有输入命令!"
	else
		str1=$cron_cmnd
	fi
done

echo "您的计划任务详细条目为:"
echo "$CRON_FILE:"
if [ -z "$cron_user" ];then
	echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $USER $cron_cmnd"
else
	echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $cron_user $cron_cmnd"
fi

str1=''
while [ -z $str1 ];do
	read -p "确认创建计划任务么(Y/n)" yesno
	if [ "$yesno" = "Y" ];then
		if [ "$choice" = "yes" ];then
			if [ -z "$cron_user" ];then 
				echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $USER $cron_cmnd" >> $CRON_FILE
			else
				echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $cron_user $cron_cmnd" >> $CRON_FILE
			fi
			break
		else
			if [ -z "$cron_user" ];then
				echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $USER $cron_cmnd" > $CRON_FILE
			else
					
				echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $cron_user $cron_cmnd" > $CRON_FILE
			fi
			break
		fi
	elif [ "$yesno" = "n" ];then
		break
	else 
		str1=''
	fi
done

echo "计划任务创建成功"
#[CODE END]

这个cronadd.sh脚本执行后操作非常简单,贴上过程:

[root@ServerX cmnd]# ./cronadd.sh 
创建计划任务名称:cron1
将创建 /etc/cron.d/cron1 文件,正在检查任务名称是否存在...
计划任务名称已经存在,是否进行追加操作(输入yes or no)?yes
请输入分钟: #Enter
cron_min:*   
请输入小时: #Enter
cron_hour:*
请输入天数: #Enter
cron_day:*
请输入月份: #Enter
cron_mon:*
请输入星期(输入0-7任意一个数,1-6为星期一~星期六|星期日请输入0或7)
输入:      #Enter
cron_week:*
请输入用户名:  #Enter
请输入命令:/bin/bash echo "nihao"
您的计划任务详细条目为:
/etc/cron.d/cron1:
* * * * * root /bin/bash echo "nihao"
确认创建计划任务么(Y/n)Y
计划任务创建成功
You have mail in /var/spool/mail/root
[root@ServerX cmnd]# 

一路回车直到提示输入计划任务的命令:/bin/bash echo "nihao"  ......OK

计划任务就这样创建好了,创建完成的计划任务是这个:

/etc/cron.d/cron1:
* * * * *  root /bin/bash echo "nihao"

如果创建时输入参数不正确,会提示重新输入,并且告诉你输入的格式,相当于限定了格式,但不容易产生错误的计划任务,程序还有待改进,希望大家指正!

最后是cmnd.py的使用,这个程序无非就是把Shell脚本调用了,相当一于一个工具集合,有四个选项:

[root@ServerX cmnd]# ./cmnd.py 
[info]打印相关信息->[输入1:打印进程信息|2:打印ip地址|3:打印端口开启状况|4:创建计划任务]
[info]请输入操作号,exit为退出,按ENTER开始:1

top - 16:xx:xx up xx:xx,  3 users,  load average: 0.00, x.xx, x.xx
Tasks: xxx total,   1 running, xxx sleeping,   1 stopped,   0 xxxxxx
%Cpu(s):  0.8 us,  0.2 sy,  0.0 ni, 98.9 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   3xxxxx4 total,  x18xxx4 used,  21x4xx free,     1036 buffers
KiB Swap:  2xxxxx6 total,        0 used,  2047996 free.   4xxx96 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                             
 xxxx root      20   0 xxxxxxx xx2632  3xxx0 S   x.x  x.x  1x:x1.32 gnome-shell                                                                                         
    1 root      20   0  xxxxxx   4148   2xx0 S   0.0  0.1   0:05.6x systemd                                                                                             
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ------                                                                                            
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.x0 ksoftirqd/0                                                                                         
    5 root       0  20       0      0      0 S   0.0  0.0   0:00.x0 kworker/0:0H                                                                                        
    7 root       0   0       0      0      0 S   0.0  0.0   0:00.x2 m-----/0                                                                                         
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 xxx_xxx         

大家有什么好的技术也可以互相交流,本人也喜欢探讨一些较深的计算机知识!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值