【从零开始的嵌入式生活】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 ”


相关文章
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
62 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
22天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
存储 移动开发 网络协议
【实战指南】从零构建嵌入式远程Shell,提升跨地域协作效率(2)
本文《从零构建嵌入式远程Shell》的第二部分,介绍了如何通过模块化设计和功能增强来优化远程Shell,包括支持阻塞命令、增加用户主动结束Shell进程的能力等,提升了跨地域协作效率。文中提供了详细的代码示例和验证步骤,适合开发者深入学习。
48 7
|
1月前
|
Shell
Shell编程(下)
Shell编程(下)
89 1
|
1月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
40 1
|
1月前
|
Shell Linux 开发工具
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
67 12
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
25 0