linux学习(四) shell脚本(1)

1.shell脚本格式

      第一行 #! /bin/shell (或者其他shell的可执行文件地址)。

第一行 指定了执行这个shell脚本呢所用的shell,在一个shell中可以调用别的shell来执行脚本。

     注释采用 # (第一行是个例外),在#后面的内容不被处理

   脚本文件中可以使用多个命令,多个命令可以放在一行,中间需要加 ; 分号隔开。 也可以直接放在不同的行。

2. 输出信息

     经常使用echo来输入内容, echo 直接输出它后面跟着的一行内容,其中可以使用变量,常量,或者命令的结果等。比如echo  hello, how are you! 

则结果输出echo后面的一行内容: hello, how are you!。   

在echo后面的字符串中成对单引号或者成对双引号,则被忽略,比如  jason@Ubuntu:~$ echo "how are you"  结果输出  how are you,

 如果要在输出中显示单引号或者双引号,则可以在成对单引号中间使用双引号(可以多个),注意只能在外侧有一对单引号; 或者在成对双引号中间使用单引号(可以多个),注意只能在外侧有一对双引号。jason@Ubuntu:~$ echo "how' are you"       输出 how' are you

输出单引号或者双引号,可以使用 \ 转义。 \'  \"

3.脚本文件权限

 默认touch创建文件的权限为 -rw-r--r--, 没有执行权限,要使得shell脚本可执行,可以使用 chmod u+x  filename

执行脚本的时候,使用的shell在PATH中可以找到,但该脚本文件的路径在PATH中一般没有,所以一般使用  脚本路径名/脚本文件名

4.使用变量

使用在shell脚本执行环境下可见的变量,用$变量名,如 echo UID:$UID, shell脚本默认在$后的是变量,需要进行解析,如果解析不到,则不进行输出。如echo $15,想要输出15美元,但只输出5. 如果需要输出$符号,则使用\$ 转义字符。

shell允许在自己的脚本中定义和使用用户变量,用户变量可以是由不超过20个字符的字母、数字或下划线组成的文本字符串,用户变量区分大小写。值通过等号赋值给用户变量,在变量、等号、变量值之间不允许空格存在。

每次引用变量时,它会生成当前赋值给他的那个值,用美元符号引用变量,变量之间相互赋值也需要使用美元符号$,如 val1='hello young man'     val2=$val1

没有美元符号$,shell将变量名理解为普通的文本字符串。

      linux中反引号(在键盘上 ~一个位置)的使用:  反引号允许将shell命令的输出赋值给变量。

testing=`date`,  则date命令的输出结果赋值给testing变量。

jason@Ubuntu:~$ date +%y%m%d
131201

today=`date  +%y%m%d`

echo  $today

131201

5.重定向输入输出

重定向输出:基本命令是通过一条命令将输出发送到文件中,使用>号。

$ date > testfile

重定向操作符创建了文件testfile(并且使用了默认的umask),并且将date的输出重定向到了testfile文件中。如果输出文件已经存在,则重定向操作会用新的文件数据重写已经存在的文件。如果需要在文件后面继续添加内容,而不是重写,可以使用 >> , $ id >> testfile

重定向输入:将一个文件的内容重定向到一条命令中,使用 <  号。

command < filename

$wc < testfile

wc命令对数据中的文本计数,默认情况下生成3个值,文本的行数; 文本的单词数; 文本的字节数

6.管道

管道可以实现进程之间的通信、数据交换,可以将一个命令的输出发送到另一个命令的输入。管道使用  | 竖线来实现。例如:rpm -qa实现列出系统中所有安装的软件包。

如果要求,输出的软件包列表排序后友好的显示,可以使用 rpm -qa | sort  |more

如果要求,输出的软件包列表排序后输出到文件中,可以使用 rpm -qa | sort | > testfile

7.shell中使用数字运算

方法以一:使用方括号(只适用于bash shell)。在bash shell中,为一个变量指定一个数学值时,可以使用美元符号或方括号( $[operation] )来实现,如: 

$ var1=$[1+5]

$echo var1

6

$var2=$[$var1*3]

$echo var2

18

使用中,由于加减乘数号在方括号中,bash shell不会将他们视为特殊符号,而是认为数学表达式符号。

这种方法的缺陷是只能进行整数的运算。浮点数不行。

方法二:浮点解决方案,使用bc (在bash shell中的计算器)bash 计算器bc实际是一种编程语言,它允许在命令行中输入浮点表达式,然后解释表达式并计算它们。在bash shell中进入bc,直接在命令行中输入bc即可。推出bc,使用quit。

jason@Ubuntu:~$ 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'. 
scale=4    //scale变量的默认值为0,在设置scale的值之前,结果的小数位只显示0位,即只显示整数部分; 设置为4,显示4位小数。

3.44/5
.6880
2+4
6

在脚本中使用bc计算:

使用反引号运行bc命令,并且把结果赋值给一个变量,格式为: variable=`echo "options; expression" | bc`

jason@Ubuntu:~$ var1=`echo "scale=4; 3.44/5"|bc`  //将命令 echo "scale=4; 3.44/5"的输出,作为输入通过管道传给 bc进程,得出结果,反引号赋值给变量var1.
jason@Ubuntu:~$ echo $var1
.6880

#!/bin/bash
#test bash shell
var1=100
var2=45
var3=`echo "scale=4; $var1/ $var2"|bc`
echo var3 is: $var3

这种方法如果要计算的表达式过多,也会比较麻烦,可以使用内置输入重定向

{       内置输入重定向允许在命令行中而非文件中为输入重定向指定数据!内置输入重定向是使用 <<连接命令和数据, command << datas,出了这个符号,还必须指定一个文本标记来说明输入输出数据的开始和结尾,该文本标记可以使用任何字符串,但在数据的开头和结尾处必须相同。

command << marker

data1

data2

....

marker

}

使用格式为:{这里是在文件中使用重定向? 只是将数据通过重定向给bc命令,而不是将文件数据给bc命令}

variable=`bc << EOF

options

statements

...

expressions

...

EOF

`

#!/bin/bash
#test bash shell
var1=100
var2=45
var3=55.2
var6=`bc << EOF
scale=4
a=($var1/$var2) 
b=($var3*$var3)
a+b #注意此处直接使用 a, b,而不是使用 $a, $b,是因为这是在bc的使用范围内
EOF
`

echo result is: $var6

8.shell 脚本的退出状态

在一条shell命令之后,调用ehco $? 返回上一条命令的退出状态,状态0表示成功运行结束,大于0的整数表示出现错误。

可以在shell脚本中shell指令后 加  exit 状态号 来改变该shell指令的退出状态。

xxxxx指令

exit  退出状态号

则该shell脚本以指定的号退出。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值