0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何給你的Linux系統(tǒng)添加一個(gè)新的Linux命令

嵌入式悅翔園 ? 來源:嵌入式軟件開發(fā)交流 ? 作者:嵌入式軟件開發(fā)交 ? 2023-02-15 09:40 ? 次閱讀

前言

平時(shí)我們在shell命令行上輸入的命令都是應(yīng)用程序,比如ls,ifconfig,vi等。我們下載的busybox源碼中就包含著這些程序源碼,那接下來我們來看看如何實(shí)現(xiàn)一個(gè)命令。

如何實(shí)現(xiàn)

我們先分析一下其他的命令,比如gcc:

gcc helloworld.c -o helloworld

上面的編譯指令中,gcc就是命令程序,然后后面的三個(gè)都是傳給它的參數(shù)。程序是如何獲取到參數(shù)的呢?我們都知道m(xù)ain函數(shù)的定義如下:

int main(int argc, char * argv[])

argc是參數(shù)個(gè)數(shù),argv是參數(shù)值。所以大家應(yīng)該都知道如何獲取參數(shù)了吧。

有了參數(shù),我們就要進(jìn)行解析了。這就有兩種方法:

對參數(shù)進(jìn)行一個(gè)一個(gè)的判斷解析

使用getopt函數(shù)進(jìn)行解析

第一種方式工作量非常大,所以我們來使用第二種方式。

getopt函數(shù)介紹

#include 
int getopt(int argc, char * const argv[], const char *optstring);

argc:參數(shù)個(gè)數(shù),直接將main函數(shù)中的argc傳給該函數(shù)。

argv:參數(shù)數(shù)組,直接將main函數(shù)中的argv傳給該函數(shù)。

optstring: 選項(xiàng)字符串。

里面還有幾個(gè)額外的全局變量:

extern char *optarg;
extern int optind, opterr, optopt;

optarg: 保存選項(xiàng)參數(shù)

optind: 記錄下一個(gè)檢索位置

opterr: 是否將錯(cuò)誤信息輸出到stderr, 為0時(shí)表示不輸出

optopt: 不在選項(xiàng)字符串optstring中的選項(xiàng)

選項(xiàng)字符串

getopt函數(shù)中有個(gè)optstring參數(shù) ,就是選項(xiàng)字符串。用來指定選項(xiàng),就比如上面gcc命令中的-o,它就是一個(gè)選項(xiàng)。

那如何給getopt傳遞選項(xiàng)字符串呢?舉個(gè)例子:

a:b:cd::e

這個(gè)選項(xiàng)字符串對應(yīng)命令行就是-a ,-b ,-c ,-d, -e選項(xiàng)。

冒號表示參數(shù),一個(gè)冒號就表示這個(gè)選項(xiàng)后面必須帶有參數(shù)。這個(gè)參數(shù)可以和選項(xiàng)連在一起寫,也可以用空格隔開。

兩個(gè)冒號的就表示這個(gè)選項(xiàng)的參數(shù)是可選的,既可以有參數(shù),也可以沒有參數(shù),但要注意有參數(shù)時(shí),參數(shù)與選項(xiàng)之間不能有空格。

實(shí)例

#include 
#include 
int main(int argc, char * argv[])
{
    int ch;
    printf("optind:%d,opterr:%d
", optind, opterr);
    printf("--------------------------
");
    while ((ch = getopt(argc, argv, "abde::")) != -1)
    {
        printf("optind: %d
", optind);
        switch (ch) 
        {
           case 'a':
               printf("option: -a

");   
               break;
           case 'b':
               printf("option: -b
"); 
               printf("The argument of -b is %s

", optarg);
               break;
           case 'c':
               printf("option: -c
");
               printf("The argument of -c is %s

", optarg);
               break;
           case 'd':
               printf("option: -d
");
               break;
          case 'e':
               printf("option: -e
");
               printf("The argument of -e is %s

", optarg);
               break;
          case '?':
               printf("Unknown option: %c
",(char)optopt);
               break;
        }
    }


    return 0;
}

運(yùn)行結(jié)果:

0cb2b6a2-ac6f-11ed-bfe3-dac502259ad0.png

-b選項(xiàng)沒有跟參數(shù)則報(bào)錯(cuò)!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208721
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    590

    瀏覽量

    27318
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4284

    瀏覽量

    62325
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    678

    瀏覽量

    21965
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    363

    瀏覽量

    23259

原文標(biāo)題:如何給你的Linux系統(tǒng)添加一個(gè)新的Linux命令

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux系統(tǒng)中unlink命令的使用

    Linux 中刪除文件,我們通常使用 rm 命令。除此以外,還有另外個(gè)命令,可以用于刪除文件和鏈接,這就是 unlink
    發(fā)表于 09-13 14:29 ?2040次閱讀

    介紹些實(shí)用的Linux命令

    作為名軟件開發(fā)人員,掌握 Linux 命令是必不可少的技能。即使你使用 Windows 或 macOS,你總會(huì)遇到需要使用 Linux 命令
    發(fā)表于 08-01 16:12 ?338次閱讀
    介紹<b class='flag-5'>一</b>些實(shí)用的<b class='flag-5'>Linux</b><b class='flag-5'>命令</b>

    Linux與用戶有關(guān)的命令

    Linux與用戶有關(guān)的命令 Linux與用戶有關(guān)的命令  passwd命令  出于系統(tǒng)安全考慮
    發(fā)表于 01-18 12:46 ?760次閱讀

    Linux系統(tǒng)管理命令

    Linux系統(tǒng)管理命令 Linux系統(tǒng)管理命令  wall
    發(fā)表于 01-18 12:47 ?799次閱讀

    Linux系統(tǒng)命令指南

    在“Linux 文件命令精通指南”中,我們討論了利用最基礎(chǔ)和最常用 Linux 文件命令所需的基本信息。在本文中,我將對 Linux
    發(fā)表于 05-23 10:23 ?953次閱讀

    Linux必學(xué)的系統(tǒng)安全命令

    新的挑戰(zhàn)。本文將重點(diǎn)介紹Linux系統(tǒng)安全的命令。 雖然Linux和Windows NT/2000系統(tǒng)一樣是
    發(fā)表于 11-02 15:09 ?0次下載

    linux常用命令實(shí)例詳解

    ,就必須從Linux命令學(xué)起,通過基礎(chǔ)的命令學(xué)習(xí)可以進(jìn)步理解Linux系統(tǒng)。不同
    發(fā)表于 11-03 10:19 ?5524次閱讀

    你不可不知的11個(gè)Linux命令

    Linux命令行吸引了大多數(shù)Linux愛好者。個(gè)正常的Linux用戶
    發(fā)表于 11-09 12:14 ?1353次閱讀
    你不可不知的11<b class='flag-5'>個(gè)</b><b class='flag-5'>Linux</b><b class='flag-5'>命令</b>

    Linux系統(tǒng)管理命令整理及使用方法介紹

    linux命令是對Linux系統(tǒng)進(jìn)行管理的命令。對于Linux
    的頭像 發(fā)表于 09-23 14:55 ?6801次閱讀

    Linux中的35個(gè)find命令用法

    Linux查找命令Linux系統(tǒng)中最重要和最常用的命令。查找用于根據(jù)與參數(shù)匹配的文件指定的
    的頭像 發(fā)表于 02-02 16:53 ?3619次閱讀
    <b class='flag-5'>Linux</b>中的35<b class='flag-5'>個(gè)</b>find<b class='flag-5'>命令</b>用法

    LINUX操作系統(tǒng)的安裝與Linux常用文件命令

    LINUX操作系統(tǒng)的安裝與Linux常用文件命令說明。
    發(fā)表于 06-02 17:45 ?3次下載

    6個(gè)有趣的Linux命令案例講解

    6個(gè)有趣的Linux命令案例講解
    發(fā)表于 08-11 17:49 ?14次下載

    Linux操作必備150個(gè)命令

    Linux 命令是對 Linux 系統(tǒng)進(jìn)行管理的命令。對于 Linux
    發(fā)表于 11-12 09:19 ?431次閱讀

    常用Linux命令介紹

    linux命令是對Linux系統(tǒng)進(jìn)行管理的命令。對于Linux
    的頭像 發(fā)表于 02-09 14:31 ?1027次閱讀

    shell命令linux命令樣嗎

    結(jié)合在起,形成個(gè)相當(dāng)于面向過程的程序,即shell script,從而實(shí)現(xiàn)些復(fù)雜的功能。 而Linux
    的頭像 發(fā)表于 11-08 10:51 ?2702次閱讀