Linux shell编程(if、for、case、while语句的解释与应用)

简介: Linux shell编程(if、for、case、while语句的解释与应用)

正文


分支结构:if语句


语法:    

           if command; then

               ...

               语句列表

           else #else也可以不要

               ...

           fi #if结束

               command可以是任意的可以执行的shell命令或者脚本



从键盘上输入两个整数,输出较大者。

read a b
if [ $a -gt $b ] ; then
   echo $a
else
   echo $b
fi

从键盘上输入一个整数,判断这个整数是否为奇数。

read a
if [ `expr $a % 2` -eq 1 ];then
  echo "这是一个奇数"
else
  echo "这不是一个奇数"
fi


多路分支语句  case语句


       语法:

           case 字符串变量 in

               模式1)

                   ...语句列表

                   ;; #类似于c语言中的break,但是在shell里,;;一定要有的。

               模式2)

                   ...

                   ;;

               ...

               模式n)

                   ;;

           esac #case结尾反过来写


     

               case语句真正的功能强大之处在于它可以使用模式,而不是固定的字符匹配

               一个模式是一串正规的字符和特殊通配符组成的字符串。

               //case模式可以用正则表达式(非常有限地支持)


特殊的通配符:

* shell通配符 代表任意多个或者0个字符(注,在正则表达式中,* 代表匹配0个或者多个先前字符)

? shell通配符 代表一个任意字符(注,在正则表达式中,? 代表匹配0个或者1个先前字符(模式))


shell中的 ;; 双引号相当于C语言中的break。


判断一个文件名,是C源文件还是c++源文件(.cpp)还是头文件:

case $1 in    #获取第一个参数
  *.c)
    echo "C文件"  ;;
  *.cpp)
    echo "C++文件"  ;;
  *.h)
    echo "头文件"  ;;
esac


循环语句


for语句


       语法:

           for 变量名 in 单词表

           do

               ...

               语句列表

           done


               "单词表":以空白符分隔开的字符串的列表

                   eq:

                       a b c ddd "a c"  几个单词? --》5个单词

                       for语句执行的次数就是“单词表”中的单词个数

                       并且吗,每次执行时,“变量名”的值 就是下一个单词的值。

for i in a b c ddd "a c"
do
    echo $i
done
        #输出 a b c ddd "a c"


用for语句求100以内的奇数之和


(())双圆括号使得可以在shell使用c语言的for风格

但是,只能在for这一行可以使用 ,其它行还是shell风格,如下代码:

for ((i=0;i<100;i++)) 
do
  if [ `expr $i % 2` -eq 1 ];then
    let n=n+i  #n=`expr $n + $i`
  fi
done
echo $n


while语句


while 命令或者表达式

       do

           ...

           语句列表

       done


练习:    

       写一个shell脚本计算一个普通文件有多少行。

       提示:

           输入重定向

           read是一行一行的读

line=0
while read var
do
  line=`expr $line + 1`
done <test.txt
echo "line = $line"


until 命令或者表达式


语法:


do

       ...语句列表

done


until和while功能类似,但是不同的是until只当测试的命令或者表达式为假时(不成功)才执行循环体内的命令列表,条件成立或成功,就退出循环,这一点和while是相反的。


输出1000以内的质数:

i=2
j=3
echo -n "1000以内的质数有:1 2 "
while [ $j -le 1000 ]
do
  until [ $i -eq $j ] 
  do
    if [ `expr $j % $i` -eq 0 ];then
    {
      break
    }
    fi
    let i=i+1
  done
  if [ $i -eq $j ];then
    echo -n "$j "
  fi
  let j=j+1
  i=2
done


break 和continue


break n

               跳出第n层循环

continue n

               转到最近的第n层循环语句执行下一轮循环

               数字n表示第几层循环

           break n ,continue n n不写默认是1,和c语言含义是一样的。


获取参数


将命令行中的参数相加,如在终端输入 ./1.sh 5 3,则输出 8.


v=`expr $1 + $2`
echo "$v"
相关文章
|
8天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
38 17
|
17天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
50 26
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
121 13
|
3月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
127 1
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
4月前
|
Shell
Shell编程(下)
Shell编程(下)
124 1
|
4月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
65 1
|
4月前
|
Shell Linux 开发工具
|
5天前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
60 32
|
4月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
150 1