IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Shell - 写一个执行C/C++的快捷脚本 -> 正文阅读

[C++知识库]Shell - 写一个执行C/C++的快捷脚本

Shell - 写一个执行C/C++的快捷脚本

学习shell已经有一周了,开发环境从vscode换到了Xshell上,以前不可一世的图形界面也变成了小黑窗,虽然有些失落,但对我也是重要的锻炼,得以让我体验早期程序员,也可能是以后C++开发的大致日常。

我有很多问题要靠自己解决,在学习了shell脚本后,我第一个想法就是写个脚本来简化编译运行C的过程,免得编写完一次就要写一长串的gcc, g++让自己犯烦。

单文件编译版本, 支持C/C++

#!/bin/bash
file=$1
# 去掉文件的扩展名,只剩下文件名
filename=$(echo "$1" | cut -f 1 -d '.')
if [ -z $1 ]
then
    echo "no file appointed!"
    exit 1
fi
echo compiling $file
echo output name: $filename
# 11.6.2 双方括号可用于字符串的高级处理
if [[ $file=="*.cpp" ]]
then
    g++ "$file" -o $filename
    ./$filename
elif [[ $file=="*.c" ]]
then
    gcc "$file" -o $filename
    ./$filename
else
    echo "invaild file!"
fi


测试:

[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# sh autorun.sh
no file appointed!

[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# sh autorun.sh test1.c 
compiling test1.c
output name: test1
I'm test1 file

[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# sh autorun.sh test2.c
compiling test2.c
output name: test2
THIS IS TEST2 FILE

[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# sh autorun.sh testinp.cpp 
compiling testinp.cpp
output name: testinp
input a number:50
number is :50[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]#

升级为全局命令

vim 打开 root/.bashrc文件夹

然后在其中写入alias cppr=sh /path/to/autorun.sh

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

export NVM_DIR="/www/server/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

alias cppr='sh ~/myScripts/autorun.sh'

以后就能直接cppr指令来执行c/c++文件了,舒服。

测试一下:

[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# cppr
no file appointed!
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# cppr test1.c
compiling test1.c
output name: test1
I'm test1 file
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# cppr test2.c
compiling test2.c
output name: test2
THIS IS TEST2 FILE
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# cppr testinp.cpp
compiling testinp.cpp
output name: testinp
input a number:
46
number is : 
46[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# 

问题记录

分辨文件类型

? 根据目前所学知识可以用if [[ expr ]]的方式完成,根据《Linux命令行与Shell编程》11.6.2 ,双方括号可用于字符串的高级处理。

将文件名的扩展名排除

? 脚本不仅得能够分辨c和cpp文件,还得把文件名的扩展名去掉,stackoverflows上一搜找到一个cut的指令:

# -d 用于设置分割符 -f 用于指定选择打印的字段,这里以分隔符为界分离出了trun和exe两个字段
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# echo "trun.exe"|cut -f2 -d'.' 
exe
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]# echo "trun.exe"|cut -f1 -d'.'
trun

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:42:06  更:2022-01-01 13:42:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:33:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码