热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Shell使用:1.Shell简介:简单的说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 是其具有可执行属性

下面具体介绍一下

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

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

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

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

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

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

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

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

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

如果不加local 关键字看看:

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

对于数字运算符:

n1 -eq n2             测试n1 = n2

n1 -ne n2                     n1!=n2

n1 -lt    n2                    n1

n1 -le n2                     n1<&#61;n2

n1 -gt n2                      n1>n2

n1 -ge n2                    n1>&#61;n2

逻辑运算符

!    逻辑非

-a 逻辑与

-o 逻辑或

()把逻辑做一整体

文件运算符&#xff1a;

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

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

-d 判断文件是目录文件

-b 块设备文件

-c 字符设备文件

-s 文件长度大于零

#!/bin/bash

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

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

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

&#xff08;2&#xff09;case语句&#xff1a;

case 字符串 in

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

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

........

esac

例&#xff1a;

#! /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&#39;t kown your name";;

esac

4.shell循环语句&#xff1a;

(1) for语句                                  

原型1&#xff1a;                                        原型2&#xff1a;                                           原型3&#xff1a;

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&#61;0
rev&#61;""
on&#61;$n #将变量n的值保存到变量on中&#xff0c;方便以后用到
echo "You put number is $n"
while [ $n -gt 0 ]
do
    sd&#61;$(( $n % 10 )) #求余
    n&#61;$(( $n / 10 )) #去掉当前的最后一位数后剩下的数
    rev&#61;"$rev$sd" #将当前的最后一位数放到字符串之后
done
echo "$on in a reverse order $rev"


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • STM32与FPGA的对比及学习建议
    本文对比了野火STM32F103指南针板和Xilinx的PYNQ-Z2板(ZYNQ-7020),介绍了野火STM32F103指南针板的学习资料和讲解视频的详细程度,建议初学者学习野火的资料。同时,介绍了STM32开发所用的Keil程序和C指针的重要性。对于ZYNQ-7020的开发,提到了其自带的Linux、Ubuntu18.4系统以及使用SD卡烧入镜像的方法。 ... [详细]
author-avatar
火影魂XJ_710
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有