【shell 脚本笔记】1. 构建基本脚本
【shell 脚本笔记】1. 构建基本脚本
最好的教学办法就是结合案例,所以我们结合代码来学习脚本。
-
脚本开头要指定使用的
bash。一般来说,linux发行版基本都预装bash,所以我们需要在每个脚本开头加上这么一行:#!/bin/bash -
最简单的
shell脚本只需要由一系列Linux命令行组成:#!/bin/bashls -al | grep *.md date -
记得在
vim中写完脚本后输入:w才能写入到文件。 -
可以使用
echo命令来简单的显示信息:#!/bin/bashecho "The date is: " date但是如果你想在同一行显示,你需要在
echo后加-n参数,这会把当前行跟下一行的信息输出在同一行。#!/bin/bashecho -n "The date is:" date -
我们也可以在脚本中使用变量。脚本变量分为系统变量和用户变量。我们这样使用系统变量:
#!/bin/bashecho "The user information is:" echo UID:$UID echo HOME:$HOME如上,只需要在变量名前加
$即可。同时你会发现,shell中大写变量和小写变量的高亮色彩是不一样的,一般来说,我们使用大写字母表示系统变量和shell变量,而使用小写字母表示我们自己使用的临时变量。就像这样:#!/bin/bashtmpVar="hello "echo $tmpVar echo $USER关于变量,我们还需要知道的是,我们可可以将变量放在双引号中,他会被自动替换,就像这样:
#!/bin/bashtmpVar="hello"echo "$tmpVar world!"另外,
shell是一门动态语言,你无需指定他的类型,他会自动推导其本身的类型。还有,最重要的是,引用变量对其进行赋值时不需要使用
$,而引用变量值时则需要使用$。就像这样:#!/bin/bashvar=10 tmp=$var test=varecho "var:$var" echo "tmp:$tmp" echo "test:$test" -
我们还可以使用命令替换,我们从命令输出中提取信息,并将其赋给变量。
这种命令有两种格式。一是这样 test=\`date\`,二是`test = $(date)`。注意的是,第一种形式中,我们使用`tab`键上面的那个符号来包裹我们的命令:就像这样:#!/bin/bashte=$(ls -al | grep *.sh) tes=`ls -al`echo $te echo $tes> **WARNING**>> 一定要注意的一个问题就是,我们在赋值的时候,**不要在`=`两侧加空格**。> -
关于重定向和输出,我们还需要知道的是,我们使用
>来重定向输出流,它会覆盖原文件的内容,如果原文件不存在,就创建它。我们使用>>表示在文件末尾追加字符。 此外,我们还可以直接在命令行中重定向数据,需要注意的是内联重定向。内联重定向可以任意字母开头,但是必须以同样的字母结尾。
就像这样:
wc << END
> this
> is
> a
> simple
> test
> END
-
在shell里,我们可以这样执行算术运算
$ expr 1 + 4 5WARNING:
我们把上述+号左右的空格去掉,你就会发现输出了
1+4。这是完全不同的,要注意。我们可以在脚本中这样做:
#!/bin/bashvar1=3 var2=4 var3=$(expr $var1 / $var2)echo "var1 / var2 = $var3"我们会发现,结果是 0 ,并不是我们期待的 0.75 ,实际上,shell 并不支持浮点数运算,它只能进行整数运算。
实际上,使用
expr这样的形式很不方便,所以我们还有一个改进方案,使用方括号,这是我们推荐的:#!/bin/bashvar1=100 var2=200 var3=$[$var1 / $var2] -
如前所述,我们怎么解决浮点数运算呢?我们可以使用 bc 计算器,就像这样:
#!/bin/bashvar1=8 var2=4 var3=$(echo "scale=4; $var1 / $var2" | bc)echo $var3 -
此外,我们还需要知道,脚本的一些状态表示。
linux 提供一个专门的变量
$?来保存上个已执行命令的退出状态。一般来说, 一个成功命令的退出状态码为 0 ;如果一个命令结束时有错误,退出状态码就是一个正数值。
我们可以在
shell中通过exit命令指定退出状态码,就像下面这样:#!/bin/basheixt 4WARNING
退出状态码只能在 0-255 之间。超过这个区间的状态码,shell 会对其进行取余操作。
To be countinued…
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
