Linux下.sh案例分析

.sh文件也叫作是shell脚本文件,在linux系统下,shell脚本文件可以将一大堆的操作指令都整合在一起,比如你要在Linux下面编译程序,有两个文件夹,一个是src,一个是bin,src中存放程序代码,bin中存放生成好的.out可执行文件,如果你想要将程序的可执行文件编译好放在指定bin下,你大致需要在src中先使用gcc+/g++,生成.out文件后在使用cp指令拷贝到bin路径下,而且你肯定想只保留一个可执行文件,所以还要用rm指令对src中的可执行文件进行删除,完成这一系列操作至少要手动输入三条指令再配上相应的参数确实让人觉得麻烦因此编写一个shell文件,将需要执行的指令放在sh文件中,比如sh文件名为test.sh,直接执行./test.sh就可以达到上述的效果,一定程度上来说是属于一劳永逸的。

首先介绍一下.sh文件的一些基本

文件首行必须是#!/bin/sh

#!是特殊符号,声明该文件是.sh文件,/bin/sh是.sh文件的编译路经

$1,$2...${10}表示配置的参数,分别表示参数一,参数二。。。参数十,注意当参数超过两位数,需要加花括号

函数定义关键字function+函数名,当.sh文件配置参数时,则需要在执行.sh文件时加上参数,如下

如果.sh文件为test.sh,则执行./test.sh;如果.sh配置了参数,则需要加上参数如  ./test.sh  p1  p2

关于.sh文件的语法这里就不介绍了,可以参考其他资料

下面开始分析一个案例,代码如下所示

#!/bin/sh        //首行必备
cur_dir=$(pwd)   //pwd表示当前路径,加上$表示这个参数赋给cur_dir

function func1()
{
	if [ "$1" = alg ];then   //如果参数一是alg则执行下面语句
		echo "$1"            //打印参数一
		echo "$2"            //打印参数二
		cp $cur_dir/makefile_alg  $cur_dir/makefile  //将当前文件夹下的makefile_alg复制为
                                                     //makefile,也放在当前文件路径下
	elif [ "$1" ];then        //这里的"$1"表示输入的第一参数,
                              //该语句意思为如果参数一是其他值,输出下面的语句并退出程序
		echo "ability set error!!!! $1  not allowed !!!!!!!!"
		exit -1
	fi	
}
function func2()
{
	cd $cur_dir/        //进入当前路径下
	if [ "$2" = clean ];then     //如果参数二是clean,则执行make clean
		make clean               //否则执行编译makefile文件
    else
		make -f makefile
	fi
	rm -f makefile               //删除makefile
	rm -f *.o                    //删除.o文件
}
//执行func1和func2都要涉及到两个参数,如果没有下面两行,则程序无执行效果
//因为这两句告诉.sh文件去执行这两个函数,否则不进行编译,
//相当于编译一个空的.sh,即执行.sh文件后无任何输出
func1 $1 $2        
func2 $1 $2        

下面是执行相应的指令得到不同的运行

第一种,不加参数

./MakeAll.sh

结果如下,因为正常应该输入两个参数,但是没有参数,所以执行func1的时候没有满足if条件的所以直接跳过func1进入func2,因为参数二也为空所以直接执行else后make -f makefile,因为没有执行func1的makefile的拷贝,所以这种情况下并不存在这个文件,因此找不到,报错

make: makefile: 没有那个文件或目录
make: *** No rule to make target 'makefile'。 停止。

第二种,加参数一,不加参数二

./MakeAll.sh alg

第三种,加参数一,也加参数二

./MakeAll.sh alg clean

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值