shell编程基础

1.初识*.sh文件
shell脚本的目的简单来说就是将用户的命令输入进内核来执行,文件以.sh后缀结尾,在linux或者类linux系统(mac os)下创建语句如下:

touch test.sh

我们可以采用vim来进行编辑该shell脚本,命令如下:

vim test.sh

tip:i表示插入(编辑),Esc表示结束编辑,shift+ZZ表示退出vim,更多命令可自行查阅vim。

创建完shell脚本之后并不是就可以执行了,还需要将其修改为可执行文件,修改命令为:

chmod +X

tip:命令详解可使用info chmod 进行查看

2.第一个shell脚本:hello world
有了第一步的基础,现在我们开始第一个shell脚本程序hello world。
用vim打开test.sh,输入以下内容:

#! /bin/sh
echo "hello world"

echo表示标准输出
现在就需要执行我们的test.sh脚本,命令如下:

sh test.sh

或者:

./test.sh

这样就完成了我们的hello world程序。

3.输入输出
有了第一个程序的基础,后面的工作就轻松了不少。现在我们来学习一下shell脚本简单的输入输出。

#! /bin/sh
echo "input a number"
read number
echo "number is "$number

read命令是用于读取用户键盘的输入,之后将值赋给变量number;
$变量名 是获取变量的值

4.条件控制
程序语言中条件控制是不可或缺的,同样在shell编程中也需要学习条件的控制,我们以最常用的两种if来举例:
第一种:

#! /bin/sh
if (test condition) then
    command
else
    command
fi

整体来看,if语句是通过if-fi 来确定开始和结束的;另外,test是关键字,用于判断condition的真假。

第二种:
当然,你也可以不使用test关键字,而采用下面的语句来实现:

if [ condition ]; then
    command
else
    command
fi

[ condition ]用于条件测试,其效果和test关键字一样,特别需要注意的是,”[“两边的空格,以及”]”左边的空格。

关于condition,shell中支持多种类型的条件判断,比如文件/目录、数值、字符串等等,感兴趣的同学可以自行查看。

5.循环
shell和其他程序语言一样提供了循环,这里介绍最常用也是最基本的两种循环:while和for,我们以累加1到100为例进行介绍:

while循环

! /bin/sh
echo "input a number"
read number
index=1
sum=0
while [ $index -le $number ];
do
    sum=$[ $sum + $index ]
    index=$[ $index + 1 ]
done
echo "sum="$sum    

while条件和前面所说的if是一样的,这里需要注意的一点是数值判断不能直接使用<和>,因为shell会对其重定向。

for循环

#! /bin/sh
echo "input a number"
read number
sum=0
for (( index = 1; index <= $number; index++ )); 
do
    sum=$[ $sum + $index ]
done
echo "sum="$sum    

for循环有多种类型,例如集合遍历,语法非常简单,这里就不介绍了。

6.函数
shell对函数的支持和其他语言没有什么太大差异,这里我以下面的函数调用为例:

#! /bin/sh
function fun1 {
    echo "first param:"$1
    echo "second param:"$2     
    return 200
}
fun1 1 2
echo "fun1 return:"$?

其中,$?表示上一条命令返回的结果。

7.调试
当我们的shell脚本代码量变大,结构变得复杂时,debug就变得至关重要了。下面我们对两种常用的调试方式进行介绍:

shell内置调试命令
(1)全局调试:

sh -x test.sh

上述命令会输出指定脚本所有代码的调试信息。

(2)局部调试
有时我们不需要这么多信息,而希望有针对性地对某部分代码进行调试,这时我们就可以使用下面的调试方式:

set -x
commands
set +x

调试工具bashdb
bashdb作为shell脚本调试工具,为我们提供了丰富的debug功能。
调试命令如下:

bashdb --debug test.sh

下面给出bashdb常用的几个参数:
l 列出当前行以下的10行
n 执行下一条语句,遇到函数,不进入函数里面执行,将函数当作黑盒
s n 单步执行n次,遇到函数进入函数里面
b 行号n 在行号n处设置断点
d 行号n 撤销行号n处的断点
c 行号n 一直执行到行号n处,如果没有写n参数,则直接执行到下一个断点处
R 重新启动
print $a 表示显示变量a的值
clear 或者d,清除所有的断点
disable / enable 禁用、启用断点
skip [count] 跳过下面一些代码
return 跳出
q 退出bashdb
finish 执行到程序最后

你可能感兴趣的:(shell)