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

本文介绍了如何编写一个简单的Shell脚本来自动化C/C++程序的编译和运行过程,通过检查文件扩展名区分C和C++文件,并调用gcc/g++进行编译。作者还展示了如何将脚本设置为全局命令,通过在.bashrc文件中添加别名,使得可以直接使用cppr命令执行C/C++程序。此外,文中提到了文件类型判断和去除文件扩展名的方法。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值