基本shell脚本

一、创建和运行shell

在创建shell文件时,必须在文件第一行指定要使用的shell,其格式为:

#!/bin/bash

例如:

Test_2 [~] 2015-10-12 22:51:57
root@pts/0 # cat test     
#!/bin/bash
date

Test_2 [~] 2015-10-12 22:52:05
root@pts/0 # ./test 
Mon Oct 12 22:52:11 GMT 2015

显示消息,如果在同一行显示一个文本字符串作为命令输出,可以用echo语句的 -n 参数:

Test_2 [/opt/shell] 2015-10-12 22:59:44
root@pts/0 # cat t1.sh 
#!/bin/bash
echo -n "the time:";date

Test_2 [/opt/shell] 2015-10-12 22:59:46
root@pts/0 # ./t1.sh 
the time:Mon Oct 12 22:59:51 GMT 2015

使用变量,反引号允许将shell命令的输出赋给变量:

Test_2 [/opt/shell] 2015-10-12 23:08:35
root@pts/0 # cat t1.sh               
#!/bin/bash
time=`date +%Y%m%d-%H:%M:%S`        ##用户变量$time
echo "time is $time"
echo "this is logged $USER"        ##环境变量$USER

Test_2 [/opt/shell] 2015-10-12 23:08:40
root@pts/0 # ./t1.sh 
time is 20151012-23:08:48
this is logged root

重定向输出与输入:

Test_2 [/opt/shell] 2015-10-12 23:11:31
root@pts/0 # date > file

Test_2 [/opt/shell] 2015-10-12 23:11:42
root@pts/0 # cat file 
Mon Oct 12 23:11:42 GMT 2015

Test_2 [/opt/shell] 2015-10-12 23:11:45
root@pts/0 # w >> file        ##双'>>'在文本后追加

Test_2 [/opt/shell] 2015-10-12 23:11:54
root@pts/0 # cat file 
Mon Oct 12 23:11:42 GMT 2015
 23:11:54 up  1:26,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.23.1     22:45    0.00s  0.21s  0.05s w

Test_2 [/opt/shell] 2015-10-12 23:11:57
root@pts/0 # wc < file 
  4  32 225        ##wc命令对文本进行计数,行数、词数、字节数

  Test_2 [/opt/shell] 2015-10-12 23:13:08
root@pts/0 # wc << eof        ##以 eof开头 与 eof结尾
> test1
> test2
> test3
> eof
 3  3 18

Test_2 [/opt/shell] 2015-10-12 23:15:08
root@pts/0 # cat file |grep root        ##管道符号
root     pts/0    192.168.23.1     22:45    0.00s  0.21s  0.05s w

二、改变shell脚本中程序的流程

if - then - else语句,不管命令是否成功,只有一个选择:

Test_2 [/opt/shell] 2015-10-12 23:27:01
root@pts/0 # cat t2.sh 
#!/bin/bash
up="/etc/passwd"
if grep wo $up ;then
echo "user is mi"
else
echo "user is not mi"
fi

Test_2 [/opt/shell] 2015-10-12 23:27:06
root@pts/0 # ./t2.sh 
user is not mi

嵌套if,检查脚本代码中的多种条件,if - then - elif:

if command1;then
command set 1
elif command2;then
command set 2
elif command3;then
command set 3
fi

test命令,提供了在if - then 语句中测试不同条件的途径:

if [ condition ];then
commands
fi

test命令可以判断3类条件:

    数值比较;

    字符串比较;

    文件比较。

test命令的数值比较功能:

比较 描述
n1 -eq n2 检查是否相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2

test命令的字符串比较功能:

比较 描述
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0

说明: 

不等的字符串条件也允许判断值是否相等,如:[ $USER != $yonghu ],标点与大小写也会比较;

 大于小于符号必须转义,否则shell会当做重定向符号,如:[ $var1 \> $var2 ]; 

test命令中,大写字母会被当成小于小写字母的,另外,字符串比较用数学比较符(>、<、=),数值比较用文本代码(eq、gt、lt)。

test命令的文件比较功能:

比较 描述
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file文件是否存在并可读
-s file 检查file文件是否存在并非空
-w file 检查file文件是否存在并可写
-x file 检查file文件是否存在并可执行
-O file 检查file文件是否存在并属当前用户所有
-G file 检查file文件是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧        

复合条件测试,即布尔逻辑组合测试,有两种:

[ condition1 ]&&[ condition2 ] 使用and组合条件,两个条件都必须满足
[ condition1 ]||[ condition2 ] 使用or组合条件,满足任意条件

if - then 的高级特性:

(( expression ))使用双圆括号可以是任意数学赋值或比较表达式

符号  描述
val++ 后增
val-- 后减
++val 先增
--val 先减
! 逻辑求反
~ 位求反
** 幂运算
<< 左位移
>> 右位移 
& 位布尔和
| 位布尔或
&& 逻辑和
|| 逻辑或

注意:不需要将双圆括号中表达式里的大于号转义

[[ expression ]]使用双方括号针对字符串比较,比test命令提供了另一特性-匹配模式[[ $USER == r* ]]

case命令,提供了一个更清晰的方法来为变量每个可能的值指定不同的选项:

Test_2 [/opt/shell] 2015-10-13 00:53:44
root@pts/0 # cat t4.sh 
#!/bin/bash
numb="$1"        ##脚本后边跟的第一个字符
case $numb in
test)
echo "this is test";;
chai)
echo "this is chai";;
root)
echo "this is root";;
*)        ##星号匹配没有列出的值
echo "thsi is null";;
esac

Test_2 [/opt/shell] 2015-10-13 00:53:51
root@pts/0 # ./t4.sh chai
this is chai

Test_2 [/opt/shell] 2015-10-13 00:54:02
root@pts/0 # ./t4.sh ssss
thsi is null

三、迭代代码片段

&#160;

&#160;

四、在脚本中处理用户输入的数据

&#160;

&#160;

五、脚本中存储和显示数据的不同方法

&#160;

&#160;

六、控制脚本在系统中运行

你可能感兴趣的:(基本shell脚本)