bash shell脚本我觉得很简单,跟c语言类似,只是有些语法不同而已。下面简要介绍构建一个基础的shell需要的知识和内容
首先一个shell脚本文件的第一行要指明用于脚本的shell,可以通过#!符号在脚本文件的第一行制定。
这是一个最简单的shell脚本,第一句表明使用/bin/bash来解释这条脚本语句。其它的三条命令就是普通的shell命令,这三个命令打包后按顺序执行。结果如下:
结果如下,显示运行的date显示系统当前时间,然后显示当前用户,最后显示当前文件所在的位置
在shell脚本中,1、在变量前使用美元符来引用环境变量2、在脚本上可以自己定义一个变量,通过在变量名前放置一个美元符来使用变量的值3、可以通过$()括号中是某条命令,可以捕获某个命令的输出。
#!/bin/bash
#测试自定义变量
days=10
guest="Katie"
echo "$guest checked in $days days ago"
days=5
guest="Jessica"
echo "$guest checked in $days days ago"
~
定义变量时不需要加美元符号,但在引用变量值的时候,一定要使用到美元符号
shell脚本最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。有两种方法可以将命令输出赋给变量:
反引号字符(`)
$()格式
例如:testing='date’或者testing=$(date)
#!/bin/bash
#使用命令替换的操作
today=$(date +%y%m%d)
ls /Users/miaochen/shell -al > log.$today
上面的列子就是一个将命令date +%y%m%d的输出赋给today这个变量,然后在shell使用这个变量的列子。
bash shell 允许你更改命令的标准输入和输出,将其重定向到其它地方。你可以通过大于号将命令输出从显示器屏幕重定向到一个文件中。也可以通过双大于号将输出数据追加到已有的文件。小于号用来将输入重定向命令。你也可以将文件内容重定向到某个命令
command > outputfile
MiaodeMacBook-Air:shell miaochen$ date > test6
MiaodeMacBook-Air:shell miaochen$ ls
log.200119 test1 test3 test5 test6
MiaodeMacBook-Air:shell miaochen$ cat test6
2020年 1月19日 星期日 17时30分49秒 CST
MiaodeMacBook-Air:shell miaochen$
command < inputfile
MiaodeMacBook-Air:shell miaochen$ wc < test6
1 5 48
MiaodeMacBook-Air:shell miaochen$
还有另外一种输入重定向的方法,称为内联输入重定向。这种方法无需使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以了。
command << marker
data
marker
MiaodeMacBook-Air:shell miaochen$ wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
3 9 42
MiaodeMacBook-Air:shell miaochen$
下面看一个重定向的另外的例子
MiaodeMacBook-Air:shell miaochen$ cat test6
2020年 1月19日 星期日 17时30分49秒 CST
hello world
MiaodeMacBook-Air:shell miaochen$ cat >> test6 <<EOF
> helloworld1
> helloworld2
> helloworld3
> EOF
MiaodeMacBook-Air:shell miaochen$ cat test6
2020年 1月19日 星期日 17时30分49秒 CST
hello world
helloworld1
helloworld2
helloworld3
MiaodeMacBook-Air:shell miaochen$
这个例子不好理解,最终是将命令行的内容追加到了test6的尾部
linux管道命令(断条符号)允许你将命令的输出直接重定向到另一个命令的输入
command1 | command2
MiaodeMacBook-Air:shell miaochen$ ls / | more
Applications
Library
System
Users
Volumes
bin
cores
dev
etc
home
opt
private
sbin
tmp
usr
var
(END)
expr命令是一种进行整数运算的简便方法。在bash shell中,你也可以通过将美元符号放在由方括号包围的表达式之前来执行基本的数学运算。为了执行浮点运算,你需要利用bc计算器命令,将内联数据重定向到输入,然后将输出存储到用户变量中。
MiaodeMacBook-Air:shell miaochen$ expr 1+5
1+5
MiaodeMacBook-Air:shell miaochen$ expr 1 + 5
6
MiaodeMacBook-Air:shell miaochen$ expr 5 * 2
expr: syntax error
MiaodeMacBook-Air:shell miaochen$ expr 5 \* 2
10
可以看到两个数字和运算符之间要留有空格
#!/bin/bash
#简单的数字运算
var1=10
var2=20
var3=$(expr $var2 / $var1)
echo The result is $var3
上面的例子通过$()来获取到expr命令的输出
MiaodeMacBook-Air:shell miaochen$ var1=$[ 1 + 5]
MiaodeMacBook-Air:shell miaochen$ echo $var1
6
MiaodeMacBook-Air:shell miaochen$ var1=$[1+5]
MiaodeMacBook-Air:shell miaochen$ echo $var1
6
MiaodeMacBook-Air:shell miaochen$ var2=$[var1*5]
MiaodeMacBook-Air:shell miaochen$ echo var2
var2
MiaodeMacBook-Air:shell miaochen$ echo $var2
30
上面是一种更简单的方法来执行数学计算,通过$[]来进行,而且对空格没有要求
#!/bin/bash
#使用$[]来进行数字运算
var1=100
var2=50
var3=45
var4=$[$var1*($var2-$var3)]
echo var4=$var4
以上运算都有一个明显的缺陷,就是只支持整数运算。为了克服这个缺陷,使用内建的bash计算器bc
MiaodeMacBook-Air:shell miaochen$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
12*5.4
64.8
quit
浮点运算的精度是靠内建变量scale控制的,例如
MiaodeMacBook-Air:shell miaochen$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 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
scale的默认值是0,没有设置前不包括小数位
在shell中使用bc,基本格式如下
var=$(echo “options;expression” | bc)
#!/bin/bash
#一个浮点数计算的列子
var1=$(echo "scale=4;3.44/5" | bc)
echo var1=$var1
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc <<EOF
scale=4
a1=$var1*$var2
a2=$var3*$var4
a1+a2
EOF
)
echo var5=$var5
~
上面的例子是在shell中使用内联符号
最后,讨论下如何在shell脚本中使用退出状态吗。shell中运行的每个命令都会产生一个退出状态吗,退出状态码是一个0~255之间的整数值,为0时表明命令成功执行。你可以用exit命来来声明一个脚本完成时的退出状态吗。
MiaodeMacBook-Air:shell miaochen$ date
2020年 1月20日 星期一 09时16分40秒 CST
MiaodeMacBook-Air:shell miaochen$ echo $?
0
默认情况下,shell脚本会以脚本中的最后一个命令的退出状态码退出
MiaodeMacBook-Air:shell miaochen$ ./test10
var5=2813.9882
MiaodeMacBook-Air:shell miaochen$ echo $?
0
可以改变这个默认 的退出状态码
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc <<EOF
scale=4
a1=$var1*$var2
a2=$var3*$var4
a1+a2
EOF
)
echo var5=$var5
exit 5
这是的退出状态码会变成多少?
MiaodeMacBook-Air:shell miaochen$ ./test10
var5=2813.9882
MiaodeMacBook-Air:shell miaochen$ echo $?
5
变成了5,我现在还不知道这个状态码有什么用,但相信在今后的shell学习中肯定是一个很重要的概念。
怎么说呢,这就是一个熟能生巧的过程,有什么难点?需要什么智商?都不需要,多写、多爱、多练,跟学英语是一个道理。