最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux之命令行參數(shù)詳解

 更新時(shí)間:2025年08月06日 10:03:01   作者:??星空&繁華  
文章介紹了Linux命令行參數(shù)的組成與分類(短/長選項(xiàng)、帶值選項(xiàng)、參數(shù)值類型),以及C/C++中main函數(shù)接收參數(shù)的方式(argc和argv),強(qiáng)調(diào)參數(shù)化使程序能靈活定制功能,并說明參數(shù)傳遞依賴父進(jìn)程bash

1.基本概念

Linux(及其他類 Unix 系統(tǒng))中,命令行參數(shù)是執(zhí)行命令或程序時(shí),跟隨在命令名稱之后的額外信息。它們的作用是向程序傳遞具體指令、配置選項(xiàng)或操作對象,讓程序根據(jù)參數(shù)的不同執(zhí)行不同的行為。

1.1.參數(shù)的組成

一個(gè)完整的命令行通常由三部分構(gòu)成:

  • 命令名稱 [選項(xiàng)] [參數(shù)值]
  • 命令名稱:要執(zhí)行的程序(如 ls、cp、grep 等)。
  • 選項(xiàng)(Options):用于調(diào)整命令的行為(如是否顯示詳細(xì)信息、是否忽略錯(cuò)誤等)。
  • 參數(shù)值(Arguments):命令操作的對象(如文件名、路徑、文本內(nèi)容等)。

例如: 

ls -l /home/user
#ls 是命令名稱;
#-l 是選項(xiàng)(表示 “以詳細(xì)列表形式顯示”);
#/home/user 是參數(shù)值(表示要列出的目錄)。

1.2選項(xiàng)(Options)的分類

選項(xiàng)是命令行參數(shù)中最靈活的部分,用于控制命令的細(xì)節(jié)行為,主要分為兩類:

1.2.1 短選項(xiàng)(Short Options)

格式以單個(gè)連字符 - 開頭,后跟一個(gè)字母(或數(shù)字)。
特點(diǎn)簡潔,可組合使用。

示例:

ls -l:-l 表示 “詳細(xì)列表”;
ls -a:-a 表示 “顯示隱藏文件”;
ls -la:組合 -l 和 -a,即 “詳細(xì)列表 + 顯示隱藏文件”。

1.2.2 長選項(xiàng)(Long Options)

格式以兩個(gè)連字符 -- 開頭,后跟完整單詞(或多個(gè)單詞,用連字符連接)。
特點(diǎn)語義明確,便于理解,通常與短選項(xiàng)功能對應(yīng)。

示例:

ls --all:與 -a 功能相同(顯示隱藏文件);
ls --format=long:與 -l 功能相同(詳細(xì)列表);
rm --force:與 -f 功能相同(強(qiáng)制刪除,不提示)。

1.2.3 帶值的選項(xiàng)

部分選項(xiàng)需要跟隨具體的值(如配置路徑、設(shè)置模式等),短選項(xiàng)和長選項(xiàng)都可能需要:

短選項(xiàng)值通常緊跟選項(xiàng)(可空格分隔,也可直接拼接)。

例如:

grep -i "hello"(-i 表示 “忽略大小寫”,值是要搜索的文本 "hello")。
長選項(xiàng)值通常用 = 連接(也可用空格)。

例如:

ls --color=auto(--color 選項(xiàng)的值為 auto,表示 “自動(dòng)根據(jù)終端是否支持顏色顯示”)。

1.3參數(shù)值(Arguments)

參數(shù)值是命令直接操作的對象,不需要前綴符號(- 或 --),常見類型包括:

參數(shù)值類型描述示例
文件名命令操作的具體文件file.txt(如 cat file.txt 中的 file.txt)
目錄路徑命令操作的目錄位置/tmp(如 cd /tmp 中的 /tmp)
文本內(nèi)容命令處理的具體文本"error"(如 grep "error" log.txt 中的 "error")
數(shù)字命令使用的數(shù)值參數(shù)10(如 head -n 10 file.txt 中的 10,表示顯示前 10 行)

注意:如果參數(shù)值本身以 - 開頭(如文件名 -test.txt),命令可能會(huì)誤認(rèn)為是選項(xiàng),此時(shí)需用 -- 分隔選項(xiàng)和參數(shù),例如:

rm -- -test.txt(-- 告訴 rm 后面的內(nèi)容都是參數(shù),不是選項(xiàng))

1.4特殊符號參數(shù)

在命令行中,有一些特殊符號被約定為特定含義的參數(shù):

  • -(連字符)

通常代表 “標(biāo)準(zhǔn)輸入(stdin)” 或 “標(biāo)準(zhǔn)輸出(stdout)”,用于命令間的數(shù)據(jù)傳遞。

示例 1:cat -(從鍵盤輸入讀取內(nèi)容,直到按 Ctrl+D 結(jié)束);
示例 2:tar -cvf - /home | gzip > backup.tar.gz(- 表示將 tar 的輸出作為 gzip 的輸入)。
  • --(雙連字符)

用于明確分隔選項(xiàng)和參數(shù),避免參數(shù)被誤解析為選項(xiàng)。

如前面提到的: rm -- -test.txt

2.main函數(shù)

在 C/C++ 程序中,main函數(shù)是程序的入口點(diǎn),它可以接收命令行參數(shù),使程序能在啟動(dòng)時(shí)獲取外部輸入。main函數(shù)的參數(shù)有固定的標(biāo)準(zhǔn)形式,用于處理命令行傳遞的參數(shù)。

main 函數(shù)的參數(shù)形式

  • 標(biāo)準(zhǔn)的main函數(shù)參數(shù)聲明如下: 
int main(int argc, char *argv[]) {
    // 程序邏輯
    return 0;
}
參數(shù)類型含義
argcint命令行參數(shù)的總個(gè)數(shù)(包含程序名本身)
argvchar *[] 或 char **字符串?dāng)?shù)組,存儲(chǔ)具體的命令行參數(shù)

2.1示例

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

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

{
  for(int i=0;i<argc;i++)
  {

   printf("argv[%d]->%s\n",i,argv[i]);

  }

  return 0;
}
  • 運(yùn)行結(jié)果:

 

想要驗(yàn)證 NULL 可以 修改i<argc成argv[i]

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

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

{
  for(int i=0;argv[i];i++)//修改i<argc成argv[i]
  {

   printf("argv[%d]->%s\n",i,argv[i]);

  }

  return 0;
}

2.3模擬命令

我們來模擬一下ls命令:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>

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

{
    if(argc!=2)
    {
            printf("Usage: %s -[a,b,c,d]\n",argv[0]);
    }


    else  if(strcmp(argv[1],"-a")==0)
    {
            printf("This is fiction 1!\n");
    }
    else if(strcmp(argv[1],"-b")==0)
    {
            printf("This is fiction 2!\n");
    }
    else if(strcmp(argv[1],"-c")==0)
    {
            printf("This is fiction 3!\n");
    }
    else if(strcmp(argv[1],"-d")==0)
    {     
            printf("This is fiction 4!\n");
    }   
    else printf("No this fiction\n");
             
   
      
   return 0;

}

ls等命令和我們寫的程序一樣,同一個(gè)程序給予不同的參數(shù),執(zhí)行不同的功能。 

2.4小結(jié)

命令行中用空格分隔參數(shù),若參數(shù)本身包含空格,需用引號(單引號或雙引號)括起來

  • argc的值至少為 1,因?yàn)?span>argv[0]始終存在
  • argv數(shù)組中的字符串都是以 null 結(jié)尾的 C 風(fēng)格字符串
  • C++ 中還可以使用char **argv形式,與char *argv[ ]等價(jià)

3.參數(shù)化的意義

3.1為什么要有命令行參數(shù)?

本質(zhì):命令行參數(shù)本質(zhì)是交給我們程序的不同的選型,用來定制不同的程序功能。命令中會(huì)攜帶很多的選項(xiàng)。 

3.2參數(shù)如何傳遞參數(shù)給main函數(shù)的

1.父進(jìn)程的數(shù)據(jù)能被子進(jìn)程看見

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>


int g_val = 100000;

int main()
{
    printf("I am father process, pid: %d, ppid: %d, g_val: %d\n", getpid(), getppid(), g_val);
    sleep(5);

    pid_t id = fork();
    if (id == 0)
    {
        // child
        while (1)
        {
            printf("I am child process, pid: %d, ppid: %d, g_val: %d\n", getpid(), getppid(), g_val);
            sleep(1);
        }
    }
    else
    {
        // father
        while (1)
        {
            printf("I am father process, pid: %d, ppid: %d, g_val: %d\n", getpid(), getppid(), g_val);
            sleep(1);
        }
    }
}

2.命令行中啟動(dòng)的程序都會(huì)變成進(jìn)程,其實(shí)都是 bash 的子程序。

  • 啟動(dòng)程序

  • vim命令 (本質(zhì)也是一種程序)

  • 因此我們得知參數(shù)是由父進(jìn)程 bash 參數(shù)傳遞的。  

4.總結(jié)

 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux多線程編程(一)

    Linux多線程編程(一)

    linux多線程設(shè)計(jì)是指基于Linux操作系統(tǒng)下的多線程設(shè)計(jì),包括多任務(wù)程序的設(shè)計(jì),并發(fā)程序設(shè)計(jì),網(wǎng)絡(luò)程序設(shè)計(jì),數(shù)據(jù)共享等。Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。
    2014-08-08
  • Ubuntu如何修改Swap交換空間大小

    Ubuntu如何修改Swap交換空間大小

    這篇文章主要介紹了Ubuntu如何修改Swap交換空間大小問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Linux在兩個(gè)服務(wù)器直接傳文件的操作方法

    Linux在兩個(gè)服務(wù)器直接傳文件的操作方法

    scp是?secure?copy?的簡寫,?是?linux?系統(tǒng)下基于?ssh?登陸進(jìn)行安全的遠(yuǎn)程文件拷貝命令,這篇文章主要介紹了Linux在兩個(gè)服務(wù)器直接傳文件的操作方法,需要的朋友可以參考下
    2022-08-08
  • 配置fail2ban對Apache服務(wù)器進(jìn)行安全防護(hù)的方法

    配置fail2ban對Apache服務(wù)器進(jìn)行安全防護(hù)的方法

    這篇文章主要介紹了配置fail2ban對Apache服務(wù)器進(jìn)行安全防護(hù)的方法,主要是起到過濾IP地址的效果,示例基于Linux系統(tǒng),需要的朋友可以參考下
    2015-06-06
  • Windows10安裝linux子系統(tǒng)的兩種方式(圖文詳解)

    Windows10安裝linux子系統(tǒng)的兩種方式(圖文詳解)

    這篇文章主要介紹了Windows10安裝linux子系統(tǒng)的兩種方式,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 解決Linux中“command not found”錯(cuò)誤的終極指南

    解決Linux中“command not found”錯(cuò)誤的終極指南

    在 Linux 系統(tǒng)中操作時(shí),你可能會(huì)遇到一個(gè)常見的錯(cuò)誤消息:“command not found”,這個(gè)錯(cuò)誤通常出現(xiàn)在你嘗試運(yùn)行一個(gè)不存在或系統(tǒng)找不到的命令時(shí),本文將帶你了解這一錯(cuò)誤的原因,并提供詳細(xì)的解決方法,需要的朋友可以參考下
    2025-08-08
  • 詳解Linux系統(tǒng)如何防止TCP洪水攻擊

    詳解Linux系統(tǒng)如何防止TCP洪水攻擊

    本篇文章主要介紹了詳解Linux系統(tǒng)如何低于TCP洪水攻擊,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Linux 自動(dòng)分區(qū)、格式化、掛載腳本詳解

    Linux 自動(dòng)分區(qū)、格式化、掛載腳本詳解

    這篇文章主要介紹了Linux 自動(dòng)分區(qū)、格式化、掛載腳本詳解的相關(guān)資料,自動(dòng)檢測是否有尚未分區(qū)的數(shù)據(jù)盤,格式化新的數(shù)據(jù)盤并自動(dòng)掛載,需要的朋友可以參考下
    2016-12-12
  • Win10安裝Linux系統(tǒng)的教程圖解

    Win10安裝Linux系統(tǒng)的教程圖解

    這篇文章主要介紹了Win10安裝Linux系統(tǒng)的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Linux下編譯安裝python3步驟

    Linux下編譯安裝python3步驟

    本篇文章主要介紹了Linux下編譯安裝python3,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

灵川县| 来凤县| 西乌珠穆沁旗| 商丘市| 哈密市| 平罗县| 吉木乃县| 山阳县| 汕尾市| 吉水县| 井陉县| 恭城| 文成县| 怀柔区| 丁青县| 赫章县| 商水县| 察隅县| 苗栗市| 东莞市| 中牟县| 东山县| 棋牌| 嫩江县| 将乐县| 繁昌县| 博罗县| 黎平县| 金门县| 兰州市| 若羌县| 镇宁| 鄂托克前旗| 柞水县| 宿迁市| 洛浦县| 剑川县| 黔江区| 新绛县| 莫力| 托克托县|