如果 shell 是你的男友,那么,shell 脚本,便是给男友的家务清单。
有一天,小红让男朋友 shell 做家务,于是,她就对 shell 说:“洗碗”,等 shell 洗完碗,她又对 shell 说:“换灯炮”,等 shell 换完灯泡,她又对 shell 说:“拖地”... ... ... 一轮家务下来,小红不停地发指令,不停地指挥做家务,比男朋友 shell 还辛苦。
第二天,小红让男友友 shell 做同样的家务,于是,她发了同样的指令。
第三天,... ... ... 第n天,日复一日,小红厌烦了这种重复的生活,于是,她列了一份清单,名为 HouseWork.sh,内容如下:
#!/bin/sh
echo "开始做家务了"
洗碗
换灯泡
拖地
…… ……
shutdown -h now
echo "做好了,洗澡睡觉"
第n+1天,小红把家务清单递给 shell 男友(./HouseWork.sh),于是,男朋友快乐地按照清单开始工作了。
这份清单,就叫做 shell 脚本(*.sh),在 window 下,叫做 批处理(*.bat)。
这一篇,我们就来谈一谈,如何高效地发号施令,让男朋友每天都快乐地做家务。
简单来说,shell 脚本,就是一系列的命令集合。
1、基本格式;
2、执行;
3、语法;
1、基本格式:就是命令的集合,跟在shell里面一条一条输指令是一样的。
#!/bin/sh # shell脚本执行时被/bin/sh解释器执行。类似于“我的男朋友是 shell,这是他要做的事”。
boyfriend="I am a handsome man!" #声明一个变量。要 shell 男友先赞美一下自已。
echo $boyfriend #赞一下,shell说:"I am a handsome man!"。
echo "start doing housework..." #shell 男朋友说:"start doing housework..."
mkdir housework #建立一个文件夹,叫 housework
cd housework #进入刚建立的文件夹
mv -r /home/cloth/ ./ #把 cloth 文件夹拷进来
./washing #执行 washing 程序
echo "housework is finished." #shell男朋友喊下:"housework is finished."
2、执行:要让男友做家务,得把家务清单递给他,递家务清单的方法有三种。
a、./HouseWork.sh,要求shell程序必须有可执行权限,chmod 0777 HouseWork.sh
b、source HouseWork.sh,source是linux下一个命令,用来执行脚本程序,常用这个,不需要 .sh 有可执行权限。
c、bashHouseWork.sh,bash是一个脚本解析器,相当于执行bash程序,HouseWork.sh是它的参数。
3、语法:
a、参数传递:
shell是可以传递参数的,比如 ./HouseWork.sh 10 要求做10个家务。
#,实际参数的个数
$0,表示调用的shell
$1,$2,$3,……,$n,第一个参数,第二个参数,第n个参数
b、输出字符串:
echo "we are rich men!"
输出:we are rich men!
c、变量定义、引用
var=1413
$(var)
d、输出字符串 echo
echo "hello!"
var=1413
echo $var
e、调用linux命令
直接执行:pwd;
得到命令返回值:var4="`pwd`/include",注意``符号,是数字1旁边的那个~
f、if else fi 语句
if [ -f a.txt ] #这里 [ 后面和 ] 前面一定要加一个空格,必须是空格
then
echo "have a.txt file"
elif [ -f b.txt ] # -f 表示判断是否有文件,-d 表示是否有目录
then
echo "have b.txt file"
else
echo "do not have file"
fi
g、比较两个字符串
str1="luffy"
str2="luffy1"
str3="luffy2"
if [ $str1 = $str2 ] #比较两个字符串,记得$str1 = $str2等号前后有空格
then
echo "$str1 = $str2"
elif [ $str1 = $str3 ]
then
echo "$str1 = $str3"
elif [ $str2 = $str3 ]
then
echo "$str2 = $str3"
else
echo "no any string is equal"
fi
h、比较数字大小
num1=1314
num2=1413
if [ $num1 -eq $num2 ] #比较数字大小 -eq(==),-gt(>),-lt(<),-ge(>=),-le(<=)
then
echo "num1=num2"
else
echo "num1!=num2"
fi
i、判断字符串是否为空
if [ -z $1 ] #-z 判断字符串是否为空
then
echo "param1 is null"
else
echo "param1 is $1"
fi
j、逻辑或、逻辑与
if [ $1 = $2 -o $1 = $3 ] #-o表示逻辑或,也可以写成 if[] || []
then
echo "P1=P2orP1=P3"
else
echo "P1!=P2andP1!=P3"
fi
[ -z $1 ] || echo "$1" #if [ ] is false($1!=null),excute echo
[ -z $1 ] && echo "null" #if [ ] is true($1=null),excute echo
k、for 和while
#打印1,2,3,4,5
for i in 1 2 3 4 5
do
echo "loop$i"
done
#ls 列出的所有文件。
for i in `ls`
do
echo $i
done
#列出所有输入参数
for i in $*
do
echo $i is param.
done
#分别打印出 i am a rich man !
str="i am a rich man !"
for i in $str
do
echo $i
done
#打印 1~13,[ ] 之间有空格,$(())有两层括号;
i=1
j=13
while [ $i -le $j ]
do
echo $i
i=$(($i+1))
done
j、echo 创建和追加文件
echo "#include <stdio.h>
int main(void)
{
printf("i am a rich man!\n");
}" > testMain.c #创建 testMain.c
echo "//It's a test file" >> testMain.c #追加字符串到 testMain.c
家务清单,全文完。