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

摘要: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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容