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
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]
no file appointed!
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
compiling test1.c
output name: test1
I'm test1 file
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
compiling test2.c
output name: test2
THIS IS TEST2 FILE
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
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
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export NVM_DIR="/www/server/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
alias cppr='sh ~/myScripts/autorun.sh'
以后就能直接cppr指令来执行c/c++文件了,舒服。
测试一下:
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
no file appointed!
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
compiling test1.c
output name: test1
I'm test1 file
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
compiling test2.c
output name: test2
THIS IS TEST2 FILE
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
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的指令:
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
exe
[root@iZbp13zqzr3c74v3o1ry3mZ 13_userInput]
trun
|