目录
一、什么是shell脚本
Linux的命令的集合,称为shell脚本
通常步骤:
1.在ubuntu系统下合适的路径下 创建以.sh结尾的文件,使用vi编辑器打开编辑shell脚本;
2.使用chmod更改本脚本的权限为可以执行,通常是
chmod +x 脚本名称
3.命令行使用以下命令执行脚本
./脚本名称 (这一个是常用的,只记这一个就可以了)
bash 脚本名称
二、shell语法
1.首行需要加上:
#!/bin/bash
告诉系统使用什么解释器来解释之后的代码
2.变量
#!/bin/bash
COUNT=1
echo COUNT = $COUNT
# date是显示日期的命令,` ` 符号是将其以命令对待,如果不加,则DATE变量的值就是date,注意:` `符号在最左上角的ESC下面一格
DATE=`date`
echo DATE = $DATE
# unset是将变量设置为我无效,再次使用则会出错
unset COUNT
#echo COUNT = $COUNT
#命令行参数,两位数的用大括号
echo 0-----$0
echo 1-----$1
echo 2-----$2
echo 3-----$3
echo 4-----$4
echo 5-----$5
echo 6-----$6
echo 7-----$7
echo 8-----$8
echo 9-----$9
echo 10-----${10}
3.read输入
read的 -p选项是在屏幕上打印提示信息,year month day等都是变量
#!/bin/bash
#echo "input year month day"
read -p "input year month day " year month day #-p选项是输入前的提示
echo $year-$month-$day
4.expr算数运算
#!/bin/bash
read -p "input tow number " val1 val2
num=`expr $val1 + $val2` # expr命令是运算命令,说明后面的式子是数学运算,expr后面和加号前后需要有空格
echo +:$num
#expr $val1 + $val2是命令,所以需要` `符号包裹
num=`expr $val1 - $val2` #减法
echo -:$num
num=`expr $val1 \* $val2` #乘法
echo *:$num
num=`expr $val1 / $val2` #除法
echo /:$num
num=`expr $val1 % $val2` #求余数
echo %:$num
5.test命令
6.if
#!/bin/bash
if test -f $1
then
echo $1 is a file 1
fi
#完整的if语句
if test -f $1
then #if判断完之后,需要执行的语句
echo $1 is a file 2
elif test -d $1 #相当于else if #后面的test命令表示判断$1是不是目录
then
echo $1 is a dir
else #就是C语言的else
echo $1 nothing is it
fi #结束的标记
#完整的if语句
if [ $2 -eq 0 ] #中括号前后需要有空格,-eq表示判断是否相等
then
echo "$2 = 0"
elif [ $2 -gt 0 ] #是否大于0
then
echo "$2 > 0"
else
echo "$2 < 0"
fi #结束的标记
7.case
#!/bin/bash
#C语言中的 switch case
case $1 in #判断$1,
1|2|3) #如果是1或者2或者3的, )右括号就是一个符号,没什么特殊意义
echo "<3"
;; #相当于break,但是不能删除
4|5|6)
echo "<6"
;;
*) #星号是配符号的意思,表示所有情况
echo ">6"
;;
esac #结束标志
8.for循环
#!/bin//bash
for val in 1 2 3 4 5
do
echo $val
done
echo ============================
#功能同上
for((val=1; val<=5; val=$val+1))
do
echo $val
done
echo ============================
for val in `ls`
do
echo $val
done
9.while循环
#!/bin/bash
NUM=1
while(($NUM < 6))
do
echo $NUM
NUM=`expr $NUM + 1`
done
echo ====================
#效果跟上边一样
NUM=1
while [ $NUM -lt 6 ]
do
if [ $NUM -eq 4 ]
then
NUM=`expr $NUM + 1`
continue
#break
fi
echo $NUM
NUM=`expr $NUM + 1`
done
10.function函数
#!/bin/bash
fun()
{
lacal A=2 #变量前面加上local 表示将变量设置为局部变量,否则就是全局变量
echo 1----$1 #$1表示函数的第一个参数
echo 2----$2
echo "Hell World"
return `expr $1 + $2` #返回值
}
fun 4 5
echo $? #$?是fun的返回值,只在调用函数后一句使用才有作用
echo $A
三、Makefile
背景:main.c文件使用了add.c文件的函数
最简单示例
add:main.o add.o
main.o:main.c #.o文件依赖.c文件,其下隐藏有cc -c -o main.o main.c命令
add.o:add.c #.o文件依赖.c文件,其下隐藏有cc -c -o add.o add.c命令
.PHONY:clean #防止当前目录下有clean文件导致该目标不能被使用,伪目标
clean:
rm -rf add
升级
add:main.o add.o #当前目录下,有main.c和add.c则会自动去生成main.o和add.o依赖文件,然后自动生成目标文件(目标 #文件需要和依赖文件其中之一有相同的名字)
.PHONY:clean #防止当前目录下有clean文件导致该目标不能被使用,伪目标
clean:
rm -rf add