1.循环 for/do/done
shell脚本的for循环结构和C语言不一样,它类似于某些编程语的foreach循环。
#!/bin/bash
for FRUIT in apple banana pear; doecho "I like $FRUIT"
done
FRUIT(可自定义变量)是一个循环变量,第一次循环$FRUIT的取值是apple,第二次取值是banana,第三次取值是pear
while/do/done
while的用法和C语言类似。比如一个验证密码的脚本:
#!/bin/bashecho "请输入密码:"
read PASSWORD
while [ "$PASSWORD" != "123456" ];doecho "sorry,try again"
read PASSWORD
done
下面的例子是通过算数运算控制循环次数:
#!/bin/bashCOUNTER=1
while [ "$COUNTER" -lt 10 ];doCOUNTER=$(($COUNTER+1))echo "$COUNTER Here we go again"done
break/continue
break[n]可以指定跳出几层循环: continue 跳过本次循环,但不会跳出循环。
即break跳出,continue 跳过。
2.位置参数和特殊变量
有很多特殊变量是被shell自动赋值的,我们已经遇到了?和$1,其他常用的位置参数和特殊变量在这里总结一下:
例程:
#! /bin/bash
echo "The program $0 is now running"
echo "The first parameter is $1"
echo "The second parameter is $2"
echo "The parameter list is $@"
shift
echo "The first parameter is $1"
echo "The second parameter is $2"
echo "The parameter list is $@
3.输入输出
echo 显示文本行或变量,或者把字符串输入到文件
管道 可以通过|把一个命令的输出传递给另一个命令做输入
cat myfile | morels -l | grep "myfile"
tee 把结果输出到标准输出,另一个副本输出到响应文件。
例程:把ls -l显示出来后,再输入一份ts.txt 文件重定向
4.函数
和C语言类似,shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表。
例程:
#! /bin/bash
fun()
{ echo "Function foo is called"
}
echo "-=start=-"
fun
echo "-=end=-"
6.shell调试
shell提供了一些用于调试脚本的选项,如:
-n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
-v 一边执行脚本,一边将执行过的脚本命令打印到标准输出
-x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。。
这些选项有三种常见的使用方法:。
1.在命令行提供参数。 如:
$ sh -x ./script.sh
2.在脚本开头提供参数。如:
#! /bin/sh -x
3.在脚本中用set命令启用或禁用参数。如:
#! /bin/bash
if [ -z "$1" ] ; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fi
set x和set +x分别表示启用和禁用x参数,这样可以只对脚本中的某一段进行跟踪调试。