天天看点

Linux&shell之Shell脚本

使用多条命令

shell脚本的关键是可以输入多条命令,甚至可以将一条命令的结果传递给另一条命令。

date;who(两个命令shell脚本的写法)

创建shell脚本

1.将shell命令放置到一个文本文件中

2.指明所使用的shell,比如#!/bin/bash

3.可以用#注释,但是一般注释不会被读取,第一行除外

案例

#!/bin/bash

#This script displays the date and who's logged on

date

who

4.保存为test1

5.将shell脚本文件所在的目录添加到PATH环境变量中(

a.修改~/.bash_profile

PATH=PATH:PATH:HOME/bin:/home/jiqing9006/shellscript

export PATH

b.执行source ~/.bash_profile)

6.在命令行提示符中使用文件的绝对路径或相对路径来引用该shell脚本

显示消息

echo Let's see if this'll work(输出字符串,如果有单引号最好将整个字符串包在“”当中,否则单引号可能不会被输出。)

echo -n "The time and date are:"

date(-n让字符串与执行结果显示在一行中)

使用变量

变量允许在shell脚本中暂存信息,以便与脚本中其他命令一起使用。

#display user information from the system.

echo "User info for userid:USER"echoUID:USER"echoUID:UID

echo HOME: HOMEechoPATH:HOMEechoPATH:PATH

(脚本中有一些变量的使用)

如果想显示$符,可以加\,如下所示

echo "The cost of the item is \$15"

用户变量

# testing variables

days=10

guest="Jiqing"

echo "guestcheckedinguestcheckedindays days ago"

days=5

guest="Jessica"

(定义用户自己的变量days,guest。这一点跟php有点相近)

# assigning a variable value to another variable 

value1=10

value2=value1echoTheresultvalueisvalue1echoTheresultvalueisvalue2

(用变量给变量赋值)

反引号``

反引号允许将shell命令的输出赋值给变量。必须将整个命令行命令用反引号包围起来。

testing=`date`(注意不是单引号,是~下面的那么符号)

#using the backtick character

testing=`date`

echo "The date and time are:" testing  #!/bin/bash  #using the backtick character today=`date +%y%m%d` ls /usr/bin -al > log.testing  #!/bin/bash  #using the backtick character today=`date +%y%m%d` ls /usr/bin -al > log.today(将ls /usr/bin -al 查询出来的结果写到log.$today文件中,执行完之后会发现新增一个log文件,里面都是查询出来的内容)

重定向输入输出

有时候想通过命令保存输出,而不是只在显示器显示输出。

输出重定向

date >test6(将date指令查询的结果保存到文件test6中)

date >>test6(将信息追加到test6文件中)

输入重定向(与输出相反的动作)

wc <test6(将文本文件的内容重定向到wc命令下,供wc统计使用)

管道

有时候需要将一个命令的输出发送到另一个命令的输入。

rpm -qa(列出所有被安装的rpm package )

|

将一个命令的输出发送到另一个命令的输入。

rpm -qa >rpm.list

sort rpm.list

(等价于rpm -qa|sort)

亦可以将重定向技术与管道结合使用

rpm -qa |sort >rpmlist

数学计算

a.expr命令

expr 1 + 2(注意要用空格,吓死我了,以为不能用来着)

expr 5 \* 2(使用乘法需要加反斜杠)

#An example of using the expr command

var1=10

var2=20

var3=`expr var2/var2/var1`

echo "The value of var3 is:"var3(定义两个变量,用expr计算结果,保存到var3中,输出结果)b.使用括号var3(定义两个变量,用expr计算结果,保存到var3中,输出结果)b.使用括号[]

echo [1+2](输出3) #!/bin/bash var1=100 var2=50 var3=45 var4=[1+2](输出3) #!/bin/bash var1=100 var2=50 var3=45 var4=[var1∗(var1∗(var2-var3)]echoThefinalresultisvar3)]echoThefinalresultisvar4

(括号让数学计算更加简便了,结果为500)

c.浮点解决方案

bash计算器实际上是一种编程语言,该语言允许在命令行中输入浮点表达式,然后解释表达式并计算它们,最后返回结果。

输入bc进入指令模式

输入quit退出指令模式

在脚本中使用bc

var1=`echo " scale=4;3.44/5"|bc`

echo The answer is var1 (将指令的结果保存给变量var1,指令中用了管道技术,输出指令给bc,bc执行之后返回结果) 来看更多的例子 #!/bin/bash var1=100 var2=45 var3=`echo " scale=4;var1 (将指令的结果保存给变量var1,指令中用了管道技术,输出指令给bc,bc执行之后返回结果) 来看更多的例子 #!/bin/bash var1=100 var2=45 var3=`echo " scale=4;var1/var2"|bc‘echoTheanswerforthisisvar2"|bc‘echoTheanswerforthisisvar3

(结果为2.2222)

var1=20

var2=3.14159

var3=`echo " scale=4;var1∗var1∗var1"|bc`

var4=`echo " scale=4;var3∗var3∗var2"|bc`

echo The answer is var4 (计算圆的面积) 还可以用EOF来计算,更加的方便,清晰 #!/bin/bash var1=10.46 var2=43.67 var3=33.2 var4=71  var5=`bc<<EOF scale = 4 al = (var4 (计算圆的面积) 还可以用EOF来计算,更加的方便,清晰 #!/bin/bash var1=10.46 var2=43.67 var3=33.2 var4=71  var5=`bc<<EOF scale = 4 al = (var1*var2)b1=(var2)b1=(var3*var4)a1+b1EOF‘echoTheanswerisvar4)a1+b1EOF‘echoTheanswerisvar5

退出脚本

$?保存最后一条命令执行结束的退出状态。

一条命令成功完成的退出状态是0。如果命令执行错误,那么退出状态就会是一个正整数。

0 完成

1 未知错误

2 误用shell

126 命令无法执行

127 没有找到命令

..

exit命令允许在脚本结束时,指定一个退出状态。

本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/3196070.html,如需转载请自行联系原作者