【从零开始的嵌入式生活】LinuxC语言——shell脚本编程(2)

简介: 【从零开始的嵌入式生活】LinuxC语言——shell脚本编程(2)

shell编程-分支语句

结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。

主要包括:条件测试语句(两路分支)、多路分支语句、循环语句、循环控制语句和后台执行语句等。


条件语句

if    表达式
then  命令表
fi


如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。

if和fi是条件语句的语句括号, 必须成对使用;

命令表中的命令可以是一条, 也可以是若干条。

可以使用test命令test命令测试的条件成立时, 命令返回值为真(0),否则返回值为假(非0).if test -f $filename也可以使用[]方括号来代替if [ -f $filename ]方括号

举个例子:


if   [  -f   $1  ]         (测试参数是否为文件)
then
echo "File  $1  exists"                     (引用变量值)
fi
if   [  -d   $HOME/$1  ]                    (测试参数是否为目录)
then 
  echo "File  $1 is  a  directory"       (引用变量值)
fi


if    表达式
then  命令表
elif  表达式
then  命令表1
else  命令表2
fi


如果表达式为真, 则执行命令表1中的命令, 再退出if语句; 否则执行命令表2中的语句, 再退出if语句.


多路分支语句

case…esac
case   字符串变量   in
           模式1)
                      命令表1
                       ;;
           模式2 | 模式3)   
                      命令表2
                       ;;
            ……
           模式n)
                     命令表n
                       ;;
   esac


可以使用如下的例子作为练习:


# The statement of  case…esac
if   [  $#  -eq  0  ]
then
  echo  "No argument is declared"
  exit
fi
case  $1  in
  file1)
    echo  "User selects file1"
    ;;
  file2)
    echo  "User selects file2"
    ;;
  *)
    echo  "You must select either file1 or file2!"
    ;;
esac


shell编程-循环语句

循环语句for的用法

for   变量名   in   单词表
      do
           命令表
      done


科普一个seq命令,用于列出一系列数字类似于python的range。


for I in `seq 1 100`
do
  SUM=`expr $SUM + $I`
done
echo $SUM


程序就用于生成0-100的求和值。

也可以使用类似于C语言的写法。


for ((I = 1; I <= 10 ; I++)) #注意是两个括号
do
  SUM=`expr $SUM + $I`
done
echo $SUM


循环语句while的用法

while 命令或表达式
  do
  命令表
  done


while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。


#!/bin/bash
I=0
while [ $I -lt 5 ]
do
       I=`expr $I + 1`
       echo -n "input score:"
       read $S
       case 'expr $S/10' in
       10 |9)
               echo "A"
               ;;
       6|7|8)
               echo "B"
               ;;
       *)
               echo "C"
               ;;
       esac
       echo "$I"
done


上面的脚本用来输入信息输出对应的字母,一共五次。


循环控制语句

break 和 continue

break n则跳出n层;

continue语句则马上转到最近一层循环语句的下一轮循环上,

continue n则转到最近n层循环语句的下一轮循环上.


shell编程-函数

shell函数调用

#方式1拿到传参
value_name=`function_name  [arg1 arg2 … ]`
#方式2拿到传参
function_name  [arg1  arg2  …  ]
echo   $?


举个例子:


grep_user()
{
       R=`grep "^$1:" /etc/passwd | wc -l` #以l开头 以:结尾
       echo $R
       return $R
}
echo -n "input sername:"
read USER
grep_user $USER
RET=$?
if [ $RET -eq 1 ]
then
       echo "$USER exist"
else
       echo "$USER not exist"
fi
echo "-$?-"


函数变量作用域

全局作用域:在脚本的其他任何地方都能够访问该变量。

局部作用域:只能在声明变量的作用域内访问。

声明局部变量的格式:Local variable_name =value


Scope()
{
Local lclvariable =1
Gblvariable = 2
echo “lclavariable in function = $ lclvariable ”
echo “Gblvariable in function = $ Gblvariable ”
}
Scope
echo “lclavariable in function = $ lclvariable ”
echo “Gblvariable in function = $ Gblvariable ”


相关文章
|
5天前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
60 32
|
1月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
101 15
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
121 13
|
3月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
78 1
|
3月前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
150 1
|
3月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
87 0
Linux 如何更改默认 Shell
|
3月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
127 1
|
3月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
130 2
|
3月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
104 2
6种方法打造出色的Shell脚本
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。

热门文章

最新文章