嵌入式Linux学习5——Shell编程

Shell 使用:

1.Shell简介:

          简单的说Shell就是一种命令解析器,是一种编程交互接口,通过驱动操作系统内核完成指定的工作,它是用户与操作系统之间的桥梁。

         分类:Linux主流的Shell有三种BASH TCSH Korn Shell

          这里我学习的是BASH 它是标准的UXIN Shell 是由 AT&T开发出来的 以快捷、简介著名

2.Shell基本使用:

        vim hello.sh 打开vi 输入

#!/bin/sh                                //#!表示指定该脚本的解析程序

echo "hello"                            //答应hello

保存 运行./hello 你发现 运行不了 为什么呢??因为这是的 文件不可执行 该怎么办呢 使用 chmod 777 hello 是其具有可执行属性嵌入式Linux学习5——Shell编程_第1张图片

下面具体介绍一下

开头指定所需的 解析器 #!/bin/sh

注释 使用#开头的一行表示注释语句

变量 在Shell中所有的变量都是字符串组成 并且无需对其预先声明     当输出时需要在变量后加入字符 比如2nd 在变量2后加上nd字符则需要在打印中把变量用{}阔起来

嵌入式Linux学习5——Shell编程_第2张图片

这样才能正确的打印出所需的字符

默认变量:$#:传入脚本命令行参数的个数

                    $*:所有命令行参数,在个参数前用空格隔开

                    $0、$1、$2: 对应命令本身 第一个命令行参数 第二个命令行参数

嵌入式Linux学习5——Shell编程_第3张图片

局部变量:子啊首次复制时加上local关键字

(注意 变量赋值(注意只在这个时候)时 “=”左右两边不能有空格 BASH语句结尾不加;分号)

嵌入式Linux学习5——Shell编程_第4张图片

如果不加local 关键字看看:

嵌入式Linux学习5——Shell编程_第5张图片

echo:打印

read:输入

例:

#! /bin/sh

echo "input name and age"

read name age

echo "name is :"$name

echo "age is:"$age

运行看看 注意 在等待输入时 要输入name变量值 和age变量值中间用空格隔开

shell 数组:

赋值方法:数组名[下标值]=值(对单个值赋值)    数组名=(value1 value2 value3...)一次性对数组赋值

取值方法:${数组名[下标值]}

#!/bin/sh

name={xiaokai xiaoming xiaohong}

echo "name[0] is : " ${name[0]}

echo "name[1] is : " ${name[1]}

echo "name[2] is : " ${name[2]}

看看结果

3:Shell控制语句:

    (1) if 语句

        原型:if 条件                                if 条件                                     if 条件

                    then 语句1                       then 语句1                              then 语句1

                    fi                                        else 语句2                               elif 条件2

                                                               fi                                              then 语句2

                                                                                                               else 语句3

                                                                                                                fi

所有测试条件

字符串测试:

-z s1          s1的长度为0为真

-n s1        s1长度大于0为真

s1             s1不为空则返回真

s1 = s2 (注意此处的空格)     在s1=s2时为真

同理s1 > s2     s1 < s2

对于数字运算符:

n1 -eq n2             测试n1 = n2

n1 -ne n2                     n1!=n2

n1 -lt    n2                    n1<n2

n1 -le n2                     n1<=n2

n1 -gt n2                      n1>n2

n1 -ge n2                    n1>=n2

逻辑运算符

!    逻辑非

-a 逻辑与

-o 逻辑或

()把逻辑做一整体

文件运算符:

-r/-w/-x 判断文件存在且是否可读、可写、可操作

-f   判断文件是否是普通文件

-d 判断文件是目录文件

-b 块设备文件

-c 字符设备文件

-s 文件长度大于零

#!/bin/bash

#将第一个命令行参数传递给变量a,第二个命令行参数传递给变量b
a=$1
b=$2

#判断a或者b变量是否为空,只要有一个为空就打印提示语句并退出
if [ -z $a ] || [ -z $b ]
then
    echo "please enter 2 no"
    exit 1

#判断a和b的大小,并根据判断结果打印语句
fi
if [ $a -eq $b ] ; then
    echo "number a = number b"
else if [ $a -gt $b ]
    then
        echo "number a>number b"
    elif [ $a -lt $b ]
        then
            echo "number a<number b"
    fi
fi

(2)case语句

case 字符串 in

模式串表达式1 ) 语句1;;

模式串表达式2 ) 语句2;;

........

esac

例:

#! /bin/sh

echo please enter your name:

read name

case $name in

tom ) echo your name is tom;;

xiaoming ) echo your name is xiaoming;;

* ) echo "we don't kown your name";;

esac

4.shell循环语句:

(1) for语句                                  

原型1:                                        原型2:                                           原型3:

for 变量 in 取值集合                    for 变量 in 文件正则表达式          for 变量 in $*

do                                                  do                                                     do

语句                                               语句                                                  语句

done                                              done                                                 done

(2)while语句

while 条件测试语句

do

语句

done

#!/bin/bash

#提示用户输入
echo -n "Pleasw enter number : "
read n #读入输入的值放到变量n中
sd=0
rev=""
on=$n #将变量n的值保存到变量on中,方便以后用到
echo "You put number is $n"
while [ $n -gt 0 ]
do
    sd=$(( $n % 10 )) #求余
    n=$(( $n / 10 )) #去掉当前的最后一位数后剩下的数
    rev="$rev$sd" #将当前的最后一位数放到字符串之后
done
echo "$on in a reverse order $rev"

你可能感兴趣的:(嵌入式Linux学习5——Shell编程)