Linux之shell脚本

 

1. 一个简单的脚本

一个简单的shell脚本如下,

#!/bin/bash
# this is a simple shell script

echo "$1"

str="hello,world"
echo "$str"

exit 0

其中第一行#!/bin/bash声明的这个脚本运行的shell工具,有些脚本会在第一行声明为#!/bin/sh,这两种声明会有细微差别,主要在于:

bash是普通的shell工具,各个linux系统都会提供这个工具。

sh使用的是POSIX标准模式shell工具,一般linux系统会软链到/bin/bash工具,或者在Ubuntu会软链到/bin/dash,软链的时候都会打开相应的POSIX标准模式。

2. 数学计算

一个简单的数学计算脚本如下,

#!/bin/bash

a=1
b=2
i=$(($a+$b))
j=$(($a*$b))
echo "$a+$b=$i"
echo "$a*$b=$j"

read -p "please input a number:" x
read -p "please input another number:" y
echo "$x+$y="$(($x+$y))
echo "$x*$y="$(($x*$y))

上述会将变量a和b相加相乘,并输入结果。如果希望让用户输入,可以使用read这个命令工具。

3. 流程控制

Linux Shell脚本语言提供条件、循环、case switch等用于流程控制,

#!/bin/bash

read -p "please input a number:" x
if [ $x -gt 0 ]; then
 echo "$x is greater than zero"
elif [ $x -eq 0 ]; then
 echo "$x is equal zero"
else
 echo "$x is less than zero" 
fi

for (( i=1;i<=5;i++ ))
do
 echo "for loop: $i times"
done

num=10
while [ $num -gt 0 ]
do
 read -p "please input a number less than 0: " num
done

上述脚本中,第一段让用户输入一个输入数字,然后判断输入的值是大于、等于、小于零;第二段使用for做了5次循环;第三段会让用户输入一个数字,如果数字大于零,则让用户重新输入,一直到有个小于零的数字才退出循环。

4. 用户输入

#!/bin/bash

read -p "please input your first name: " firstname
read -p "please input your last name:" lastname
echo "Your name is: $firstname $lastname"

5. 文件读写

在下面的脚本中,第一段判断/tmp/test.log文件是否在,如果不在,则创建一个,如果在,则删除;第二段则在/tmp目录下找到7天之前的*.log日志文件并删除。

#!/bin/bash

if [ ! -e /tmp/test.log ]; then
 echo "file doesn't exist, try to create one"
 touch /tmp/test.log
else
 echo "file exists there already, try to remove it"
 rm /tmp/test.log
fi

#remove log file which is created earlier than 7 days ago
find /tmp -mtime +7 -type f -name *.log -exec rm -f {} \;
find /tmp -mtime +7 -type f -name [ab].log -exec rm -f {} \;

6. 脚本的执行

脚本的执行有下面几种方式,可以在shell中直接运行脚本,也可以使用sh来调用,也可以使用source来调用。其中source的调用执行后,脚本的变量声明都会留在当前shell中。

./test.sh
sh ./test.sh
source ./test.sh
nohup sh ./loop.sh &

最后一个是运行loop.sh脚本在后台,测试脚本如下,

#!/bin/bash

while true
do
 echo "sleep 1 seconds"
 date +%Y%m%d%H%M%S >> /tmp/date.log
 sleep 1
done

结尾

上述脚本代码可以到此git代码仓库(https://git.oschina.net/pphh/shellTmpl.git)中获取,此代码仓库提供更多的shell脚本模板,比如打印系统版本信息,硬件信息等。