shell编程入门

一、Shell入门

我们先看一个小例子,永恒的经典:Hello World

1
2
3
#!/bin/sh
var="Hello World!"
echo $var

保存,文件名为:hello
我们发现文件的第一行虽是一个注释,但是说明了文件的执行是由/bin/sh来执行,所以我们这么来执行这个文件:

1
/bin/sh hello

就可以看到结果了,但我们知道在Linux下,一个文件是否可以执行是由文件属性来决定的,那么我们是否可以给他加上可执行权限,来执行这个文件呢?
先执行如下命令:

1
chmod u+x hello

然后我们在直接敲命令:hello,看到什么现象?
所以一个文件被执行有这两个途径

二、Shell语法入门

1. 输入/输出内部命令

①. echo 输出命令
②. read 输入命令

例如:

1
2
3
4
5
6
#!/bin/sh
echo Name:
read NAME
echo Phone:
read PHONE
echo SNAME,SPHONE > contact.txt

2. if条件语句

在看if条件语句之前,我们先看一下:测试命令执行结果,在Linux下正确的命令执行结果为0,否则为其他值,我们可以用:

1
echo $?

来看上一个命令的执行结果,懂了这些之后,我们在看那些常见语法

1
2
3
4
5
6
if 条件测试命令串
then
    条件为真时执行的命令
else
    条件为假时执行的命令
fi

注:if和then必须是两行,如果放一行,请在then前加“;”

例如:

1
2
3
4
5
6
7
8
9
#!/bin/sh
echo Input file name:
read NAME
if [ -d $NAME ]
then
    echo Dir
else
    echo Not Dir
fi

3. case条件语句

1
2
3
4
5
6
7
8
9
10
11
case 条件测试命令串 in
表达式1)
    分支1执行的命令
    ;;
表达式2)
    分支2执行的命令
    ;;
*)
    其他命令
    ;;
esac

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh
echo Input file name:
read NAME
ft=`file "$NAME"`
case "$ft" in
"$NAME: ASCII"*)
    echo \"$NAME\" is ASCII text
    ;;
"$NAME: directory"*)
    echo \"$NAME\" is DIRECTORY
    ;;
*)
    echo \"$NAME\" is OTHER FILE TYPE
    ;;
esac

注:本文件第四行第四个字符为~上的那个点,不是单引号!

4. for循环语句

1
2
3
4
5
for 变量名
    [in 数值列表]
do
    循环执行的命令串
done

例如:

1
2
3
4
5
6
#!/bin/sh
for var
    in `ls`
do
    echo $var
done

5. while循环语句

1
2
3
4
while 循环条件命令串
do
    循环命令串
done

例如:

1
2
3
4
5
6
7
8
#!/bin/sh
VAR=1
while [ $VAR -le 9 ]
do
    RESULT=`expr $VAR \* $VAR`
    echo $VAR*$VAR=$RESULT
    VAR=`expr $VAR + 1`
done

6. until 循环语句

1
2
3
4
until 循环条件命令串
do
    循环命令串
done

例如:

1
2
3
4
5
6
7
8
#!/bin/sh
VAR=1
until [ $VAR -gt 9 ]
do
    RESULT=`expr $VAR \* $VAR`
    echo $VAR*$VAR=$RESULT
    VAR=`expr $VAR + 1`
done

7. 函数

1
2
3
4
函数名()
{
    命令串
}

例如:

1
2
3
4
5
6
7
8
9
10
11
12
power()
{
VAR=1
until [ $VAR -gt 9 ]
do
    RESULT=`expr $VAR \* $VAR`
    echo $VAR*$VAR=$RESULT
    VAR=`expr $VAR + 1`
done
}
echo Power:
power

这是一个无参函数,下面我们看看有参函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh
sum()
{
    SUM1=0
    while [ $# -ne 0 ]
    do
        SUM!=`expr $SUM1 + $1`
        shift
    done
    echo SUM:$SUM!
}
echo Please some number:
read NUM
sum $NUM

这是一个求和函数,保存为sum,这样我们可以执行sum 1 2 3 3 4 5,expr 为计算的意思,shift为移位,也就是把我们输入的1 2 3 4 5,依次变为第一个带入到本程序的第七行的“$1”

三、调试Shell程序

因为Shell都是通过vim编写,并没有像写Java那样的IDE,所以调试错误就很重要了,因为Shell的关键字都是小写,所以我们把一般变量都大写,这些都是一般错误,但有时候一个复杂的程序,我们怎么debug呢?这就需要我们调试跟踪,调试跟踪有两个参数:
1. -v选项
2. -x选项

例如:我们可以 /bin/sh -v 程序名或者 /bin/sh -x 程序名,这个比较简单就不多说了,感兴趣的可以自己试一下。

分享到:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值