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脚本模板,比如打印系统版本信息,硬件信息等。