Shell基础
#!/bin/bash必须在脚本的头一行,#!必须是脚本的头两个字符,意义是用户指定用于执行脚本的Sheel解释器。
变量:
语法:变量名=<值>
注意:赋值操作符“=”两边必须不能由空格。
如果被赋值的变量包含任何的定界符,那么应该使用单引号或者双引号。
输入变量的值:
语法:$read 变量名
当脚本执行到read语句时,将等待用户输入一个值给变量。
变量的作用域:
局部变量:只能在创建这个变量的Shell中有效的变量。
全局变量:可以由父Shell传递值到子Shell的变量。
Linux是通过export命令把一个局部变量变成全局变量。
数值运算:
使用expr命令可以用于求值算术表达式。默认的,expr会把结果输出到标准输出。
注意:操作符“*”需要在前面增加转义符“\”
运算符号两边必须有空格。
命令转换:
是一个命令中使用多个命令的方法。
命令替换首先执行被替换的命令,然后执行整个名命令。
第一种方法:使用重音符“`”的形式
第二种方法:使用$()的形式
如:
echo “The date is ‘date’”
echo “The date is $(date)”
Shell流程控制
test和[]测试命令
测试命令对表达式进行测试,求出真(true)或者假(false)的逻辑值。
测试语句要求比较运算符两边都要有空格。
多个条件用-a(与)或者-o(或)连接。
脚本流程分支结构
if结构
格式:
if<condition>
then
<command(s)>
fi
其中condition是能够返回真或者假的测试表达式,如果测试表达式结果为真执行command语句或者语句序列,如果为假则不执行command语句或者语句序列。fi用于指出此分支结构的结束。
case … esac
格式:
case <$name> in
value1)
<command1(s)>
;;
value2)
<command2(s)>
;;
……
valueN)
<commandN(s)>
;;
*)
<command(s)>
;;
esac
结构求变量name的值并和value1…valueN进行比较,当和其中的一个值相匹配时,就执行该变量下的命令序列。
;;的作用是使得一个匹配值所要执行的命令序列和下一个值的命令序列隔开。
脚本流程循环结构
while结构
格式:
while<condition>
do
<command(s)>
done
until结构
格式:
until<condition>
do
<command(s)>
done
for结构
格式:
1)for(([expr1];[expr2];[expr3]))
其中expr1是被用于初始化的表达式;然后检查expr2的值,如果为真,则执行循环体中的语句序列command,如果为假则结束循环。
2)for name in <list_of_values>
do
<command(s)>
done
其中list_of_values中的各个值将依次赋值给变量name,并且对于每一次赋值,执行循环体中的语句序列command。
break和continue命令
break命令用于循环体中,可以导致立即结束循环。
continue命令用于循环体中,能导致立即开始新的循环。