摘要:Linux
,Python
Linux创建一个md5命令工具
工作中需要频繁使用到一个字符串的md5,因此编写一个md5命令工具,输入字符串直接得到输出,并且命令支持参数设置,比如是否事先格式化,指定不同参数可以支持多功能输出,操作步骤如下
(1)使用Python实现需求逻辑
直接vim一个脚本,脚本名md5不需要.py后缀,这样更像一个命令,注意在脚本第一行引入python解释器,并设置utf-8编码
#!/usr/bin/python
# coding=utf-8
import re
import hashlib
import sys
def get_md5(raw):
return hashlib.md5(str(raw)).hexdigest()
def get_formatted_str(raw):
return raw.strip().replace('(', '').replace(')', '').replace('(', '').replace(')', '')
if __name__ == '__main__':
if len(sys.argv) < 2:
print "请至少传入一个需要转化的字符串"
sys.exit(1)
input_str = sys.argv[-1]
is_formatted = False
is_list = False
for i in sys.argv[1:-1]:
if not i.startswith('-'):
print "可选参数格式错误:{}".format(i)
sys.exit(1)
elif i == '-f':
is_formatted = True
elif i == '-l':
is_list = True
if is_list:
for line in [x for x in input_str.split(' ') if len(x) != 0]:
if is_formatted:
print get_md5(get_formatted_str(line))
else:
print(get_md5(line))
else:
if is_formatted:
print get_md5(get_formatted_str(input_str))
else:
print get_md5(input_str)
其中-f支持先格式化再得到md5,-l支持传入多个字符串用空格分开
(2)赋予可执行权限功能测试
赋予可执行权限
chmod +x md5
测试是否符合要求
./md5 -f 这是一个测试(中国)有限公司
94da93050cefbe523afd83eb2df98921
./md5 -f 这是一个测试中国有限公司
94da93050cefbe523afd83eb2df98921
./md5 -f -l '这是一个测试(中国)有限公司 这是一个测试中国有限公司'
94da93050cefbe523afd83eb2df98921
94da93050cefbe523afd83eb2df98921
./md5 -l '这是一个测试(中国)有限公司 这是一个测试中国有限公司'
b5eb9dfcef74a75b865973616e547699
94da93050cefbe523afd83eb2df98921
(3)放置到系统命令文件夹下
直接放置到/usr/local/bin
目录下(需要root权限)
cp md5 /usr/local/bin/
也可以使用软连接的方式,推荐使用绝对路径
ln -s /home/tool/md5 /usr/local/bin/md5
root@ubuntu:~/tool# ll /usr/local/bin/
total 60
drwxr-xr-x 2 root root 4096 8月 13 16:03 ./
drwxr-xr-x 15 root root 4096 8月 13 15:29 ../
-rwxr-xr-x 1 root root 8304 4月 2 2020 crf_learn*
-rwxr-xr-x 1 root root 8296 4月 2 2020 crf_test*
lrwxrwxrwx 1 root root 23 8月 13 16:03 md5 -> /home/tool/md5*
lrwxrwxrwx 1 root root 23 6月 19 2020 Studio-3T -> /opt/studio3t/Studio-3T*
-rwxr-xr-x 1 root root 552 7月 3 2019 yelp*
之后就可以在环境变量中直接使用到md5命令
root@ubuntu:~# md5 这是一个测试集团有限公司
ce69fd224d339031cec4d9937185eb07
修改shebang指定Python解释器
shebang
:中文翻译“释伴”,由#!
开头的字符串,出现在文本文件的第一行
。类UNIX操作系统的程序载入器会分析shebang后的内容,将这些内容作为解释命令,并调用该指令,并将载有shebang的文件路径作为该解释器的参数
比如#!/bin/bash
就是使用/bin/bash作为解释器运行脚本,如果以Python作为解释器运行脚本先找到Python解释器的路径,一般在Linux自带的/usr/bin/python
是Python2版本,也可以指定其他Python版本#!/opt/anaconda3/bin/python
,第二行为# coding=utf-8
用来指定编码格式,否则Python2输出中文乱码
/usr/local/bin用户可执行文件目录
对于自定义脚本,推荐放置在/usr/local/bin
目录,有多个可执行文件目录在环境变量中,区别如下:
/bin
: 包含二进制可执行文件,为系统最基本的命令,如ls等
/sbin
: 与/bin 类似,不同之处是其为root权限命令文件
/usr/bin
: 系统预装可执行文件,会随着系统升级而改变
/usr/sbin
: 同上,不同之处是其为root权限运用
/usr/local/bin
: 三级目录,用户自己的可执行文件,系统不管理
/usr/local/sbin
: root权限用户程序
编写一个获取本机所在内网IP的工具
vim myip
#!/usr/bin/python
# coding=utf-8
import socket
def get_myip():
s = None
ip = None
try:
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('8.8.8.8',80))
ip=s.getsockname()[0]
except Exception as e:
print e
finally:
if s:
s.close()
return ip
if __name__ == '__main__':
ip = get_myip() or ''
print ip
ln -s /home/tool/myip /usr/local/bin/myip
root@ubuntu:~# myip
10.3.11.214