日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Shell - 脚本实现控制台一键编译运行 C++ 代码

發布時間:2025/3/20 c/c++ 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell - 脚本实现控制台一键编译运行 C++ 代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

由于電腦內存不足將 Clion 給卸載了,現在只能用 Vim 來編寫 C++ 代碼了。但是每次寫完代碼之后都需要經過「編譯g++ test.cpp」和「執行./a.out」兩步操作,感覺用起來比較繁瑣。于是,我有了用 Shell 將這兩條命令合成一個腳本簡化執行的想法。

文中腳本執行環境:

  • macOS Catalina 10.15.4
  • iTerm2

PS:本文適合不懂 Shell 編程的同學,腳本大佬請繞道orz。

1. 命令串聯執行

首先,我們先要將g++ test.cpp 和 ./a.out 這兩行命令都放到腳本中。Shell 腳本可以直接執行我們日常寫在命令行中的命令,不需要額外的語法,比較方便。

于是就有了如下的第一版 Shell 腳本 ex.sh:

#! /bin/sh echo "Script Start" g++ test.cpp; ./a.out; echo "Script End"

通過 sh ex.sh 命令執行腳本,可以得到如下輸出,可見能它能基本完成我們的需求。

Script Start Hello World Script End

PS:test.cpp 是個簡單的 HelloWorld 程序。

2. 建立命令之間的關聯性

上面的初版腳本還有優化空間,例如在 C++ 代碼編譯失敗后,上面腳本還是會去運行上次編程成功的程序,而我們希望 C++ 代碼編譯失敗后不再去運行程序。這就需要我們建立命令之間的關聯性。

這里介紹三個非常常用的分隔符:

  • 分隔符;:這條命令的執行結果不會影響下一條命令的執行,它可以讓各條命令獨立執行,但不保證所有命令都執行成功。

  • 分隔符&&:前面的命令執行成功,才會去執行后面的命令,它可以保證各條命令執行完畢時,所有命令都是執行成功的

  • 分隔符||:前面的命令執行失敗,才會去執行后面的命令。

基本上面這些分隔符的應用,有了如下的第二版的 Shell 腳本:

#! /bin/sh echo "Script Start" g++ test.cpp && ./a.out echo "Script End"

PS:經過實驗發現,第一版去掉;分隔符也可達到相同效果(捂臉 )

3. 接收傳入腳本的參數

雖然功能上是沒有問題了,但是 C++ 文件名是寫死,每次運行都需要修改,非常不方便。我們希望在運行腳本的時候傳遞 C++ 代碼的文件名,于是需要引入腳本的參數傳遞。

在觀摩了「菜鳥教程 - Shell 傳遞參數」文章后,總結出了以下重點:

  • 我們可以在執行 Shell 腳本時,向腳本傳遞參數。例如,執行sh ex.sh param, param 為傳入腳本的參數;
  • 腳本內獲取參數的格式為:$n。n 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推……
  • 其中 $0 為當前執行的腳本文件名。

還有幾個常用的特殊字符用來處理參數:

  • $#:傳遞到腳本的參數個數。
  • $*:以一個單字符串顯示所有向腳本傳遞的參數。
  • $@:與$*相同,但是使用時加引號,能在引號中返回每個參數。

我們可以用下面例子理解 $* 和 $@ 的區別:

假如我們給腳本傳入了參數 param1 param2 param3

  • 用"$*" 得到的是 "param1 param2 param3",包含所有參數的一個字符串。
  • 用"$@" 得到的是 "param1" "param2" "param3",包含三個對應參數字符串元素的數組。

于是就得到了我們的最終版腳本:

#! /bin/sh# 輸出參數個數 echo "The number of params: $#"# 輸出腳本名 echo "The filename of shell: $0"# 輸出傳入腳本的參數 for i in "$@" doecho "$i" done# 編譯、運行指定名稱的C++代碼 g++ $1.cpp && ./a.out

通過 sh ex.sh test 就能完成對 test.cpp 的編譯和運行,是不是方便了不少呢?(其實并沒有 )

參考資料

  • https://www.runoob.com/linux/linux-shell.html
  • https://blog.csdn.net/craftsman2020/article/details/107850685

總結

以上是生活随笔為你收集整理的Shell - 脚本实现控制台一键编译运行 C++ 代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。