pythonPythonLinux

Linux:Python编写Linux自定义命令工具

2021-08-13  本文已影响0人  xiaogp

摘要:LinuxPython

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
上一篇下一篇

猜你喜欢

热点阅读