1. Shell脚本简介
简单的说,当命令或者程序不在命令行执行,而是通过一个程序文件来执行,这个程序就被称为shell脚本。
也就是在shell脚本里内置了多条命令,语句,循环控制,然后将这些命令一次性执行完毕。
2. 在终端中显示输出
2.1 shell脚本的编写及执行
以hello world脚本程序分析
#!/bin/bash
#only is a test shell
echo "hello world"
代码执行方式
a.将脚本名作为命令行参数
am335x@ubuntu:/work/project/linux_shell$ bash test.sh
hello world
b.授予脚本执行权限,将其变为可执行文件:
am335x@ubuntu:/work/project/linux_shell$ chmod +x ./test.sh
am335x@ubuntu:/work/project/linux_shell$ ./test.sh
hello world
代码分析
1. shell脚本都会以#!/bin/bash为起始。/bin/bash是Bash的解释器命令路径。
2.注释部分以#为起始,一直延续到行尾。注释行通常用于描述代码或是在调试期间禁止执行某行代码。
2.2 echo命令
echo是用于终端打印的最基本命令。默认情况下,echo在每次调用后会添加一个换行符:
使用echo命令的方式有三种
1. echo "hello world"
2. echo 'hello world'
3. echo hello world
这些方法看起来相似,但各有特定的用途及副作用。双引号允许shell解释字符串中出现的特殊字符。单引号不会对其做任何解释。例如:
echo hello; hello;
bash会将echo hello当作一个命令,将hello当作另一个命令,因为分号在Bash shell中用作命令间的分
隔符。
3. 使用变量
#!/bin/bash
#only is a test shell
fruit=appel
count=5
echo "We have $count ${fruit}s"
1. 可以使用等号操作符为变量赋值: varName=value
注意:var = value不同于var=value。把var=value写成var = value是一个常见的错误。
两边没有空格的等号是赋值操作符,加上空格的等号表示的是等量关系测试。
2. 在变量名之前加上美元符号($)就可以访问变量的内容。
注意: 使用单引号时,变量不会被扩展(expand),仍依照原样显示。这意味着$ echo'$var'会显示$var。
4. 因为shell使用空白字符来分隔单词,所以我们需要加上一对花括号来告诉shell这里的变量名是fruit,而不是fruits。
4.数学运算
4.1 数学运算时不能直接相加
#!/bin/bash
#only is a test shell
no1=5
no2=6
result=$no1+$no2
echo $result
am335x@ubuntu:/work/project/linux_shell$ ./test.sh
5+6
4.2 let命令
#!/bin/bash
#only is a test shell
no1=5
no2=6
let result=no1+no2
echo $result
a.let命令可以直接执行基本的算术操作。当使用let时,变量名之前不需要再添加$
let result=no1+no2
b.let命令的其他用法如下:
自加操作: let no1++
自减操作: let no1--
简写形式: let no+=6 let no-=6
c.只支持整数运算
4.3 []操作符
#!/bin/bash
#only is a test shell
no1=5
no2=6
result=$[no1+no2]
echo $result
a.操作符[]的使用方法和let命令一样,但是需要在[]外加上$:
result=$[ no1 + no2 ]
b.在[]中也可以使用$前缀,例如:
result=$[ $no1 + 6 ]
c.只支持整数运算
4.4 ( ( ) )操作符
a.与[]操作符一样,出现在(())中的变量名之前需要加上$:
result=$(( no1 + 50 ))
b. 只支持整数运算
4.5 bc工具
#!/bin/bash
#only is a test shell
echo "4*0.56" | bc
no=54
result=`echo "$no * 1.5" | bc`
echo $result
a. 执行脚本效果如下
am335x@ubuntu:/work/project/linux_shell$ ./test.sh
2.24
81.0
b. ``操作符将echo输出的值赋值给result
c. bc工具支持浮点运算
d.设定小数精度。
在下例中参数scale=2将小数位个数设置为2。因此,bc将会输出包含个小数位的数值:
echo "scale=2;22/7" | bc
3.14
e. 进制转换。用bc可以将一种进制系统转换为另一种。
#!/bin/bash
#用途:数字转换
no=100
echo "obase=2;$no" | bc
1100100
no=1100100
echo "obase=10;ibase=2;$no" | bc
100
f.计算平方及平方根
echo "sqrt(100)" | bc
10
echo "5^2" | bc
25
5.文件描述符与重定向
5.1 文件描述符操作
a. 文件描述符是与某个打开的文件或数据流相关联的整数。
文件描述符0、1以及2是系统预留的。
0 —— stdin (标准输入)。
1 —— stdout(标准输出)。
2 —— stderr(标准错误)。
b.使用大于号将文本保存到文件中:
$ echo “This is a sample text 1” > temp.txt
该命令会将输出的文本保存在temp.txt中。如果temp.txt已经存在,大于号会清空该文件中
先前的内容。