您的位置:首页 > 运维架构 > Shell

16.shell脚本编程(1)

2016-01-06 21:35 337 查看
这些内容来自《linux命令行与shell脚本编程大全》,做一下笔记。

bash脚本编程第一行需要写上一行特别的注释,让bash执行环境能够识别

#!/bin/bash


假如在你写好名叫a.sh的脚本后,此时你是无法用a.sh直接执行的,因为这个脚本对当前用户来说没有执行权限,所以你要修改权限u+x,此外这个脚本并没有在PATH环境下,你需要讲当前目录增加到PATH环境中。那么有没有简单的处理方法。当然是有的
xin@xin ~/test $ bash 1.sh

这样就能直接执行。
写一个脚本叫a.sh

xin@xin ~/Test $ cat a.sh
#!/bin/bash
echo "当前时间: "
date
xin@xin ~/Test $ bash a.sh
当前时间: 
2016年 01月 07日 星期四 10:17:56 CST
在我们习惯中我们会想让数据在同一行显示
xin@xin ~/Test $ cat a.sh
#!/bin/bash
echo -n "当前时间: "
date
xin@xin ~/Test $ bash a.sh 
当前时间: 2016年 01月 07日 星期四 10:35:47 CST
环境变量:用来记录特定系统信息。可以使用set来查看所有的。
用户变量:定义变量用来零时存储数据的。

有时候我们需要将命令输出的内容保存到变量中,那么我们需要使用反引号。跟~同一个键。

xin@xin ~/Test $ testing=`date`
xin@xin ~/Test $ echo $testing
2016年 01月 07日 星期四 10:42:52 CST
重定向输入输出。
> 正确覆盖写到文件

>> 正确追加写到文件

2> 错误覆盖写文件

2>> 错误追加写文件

&> 不论正确错误都覆盖写

&>> 不论错误还是正确都追加写

输入重定向

< 将一个文件读入,并进行处理

xin@xin ~/Test $ wc < date 
  8  38 352
<< 内联输入重定向,允许你从命令行里输入

xin@xin ~/Test $ tr 'a-z' 'A-Z' >> c.txt << EOF
> 1234
> 5678
> aaaa
> bbbb
> EOF
xin@xin ~/Test $ cat c.txt 
1234
5678
AAAA
BBBB
| 将一个命令的输出作为另一个命令的输入
xin@xin ~/Test $ date | wc
      1       6      43
expr 允许在命令行上仔细整数运算,注意使用空格
xin@xin ~/Test $ expr 1 + 5
6
xin@xin ~/Test $ expr 1+5
1+5
xin@xin ~/Test $ expr 1 * 5
expr: syntax error
xin@xin ~/Test $ expr 1 \* 5
5

除了使用expr以外还可以使用$[ 1 + 5 ]

xin@xin ~/Test $ var=$[1 + 5]
xin@xin ~/Test $ var2=$[$var * 2]
xin@xin ~/Test $ echo $var2
12
浮动运算的解决
xin@xin ~/Test $ bc 
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
3.44/5
0
scale=4
3.44/5
.6880
quit
xin@xin ~/Test $
在脚本中使用浮点运算
xin@xin ~/Test $ bash a.sh
最后运算得到值为.6880
xin@xin ~/Test $ cat a.sh 
#!/bin/bash
var=`echo "scale=4; 3.44/5" | bc`
echo "最后运算得到值为$var"</span></span>
xin@xin ~/Test $ cat b.sh 
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71

var5=`bc << EOF
scale=4
a1= ( $var1 * $var2 )
b1= ( $var3 * $var4 )
a1 + b1
EOF`

echo 最后结果$var5
xin@xin ~/Test $ bash b.sh 
最后结果2813.9882

脚本退出,通过$?可以获得脚本最后一个命令的执行状况
0 命令成功结束

1 通用未知错误

2 误用shell命令

126 命令不可执行

127 没有找到命令

128 无效退出参数

128+x Linux信号x的严重错误

130 命令通过Ctrl+c终止

255 退出状态码越界

exit指定脚本中最后一个命令的退出码状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: