shell编程介绍以及实现简单的计算器小程序

Linux 操作系统在服务器端和移动设备领域占有极为重要的地位,在 Linux 中,Shell 编程语言是一种基于命令行的脚本语言,也是系统管理员和开发人员常用的一种脚本语言。本篇博客将介绍 Linux 下的 Shell 编程,同时通过一个计算器程序的示例来演示 Shell 编程的基本语法和用法。

1. 什么是 Shell 编程

Shell 是一种命令行解释器,用于在 Linux 系统中执行命令和脚本。Shell 编程是使用 Shell 语言编写脚本,通过脚本实现自动化任务和系统管理。Shell 编程可以使用 Linux 系统提供的命令和工具,如文本编辑器、文件操作命令、管道命令、awk、sed 等,同时支持变量、条件语句、循环语句、函数等基本语法和控制结构,能够完成各种自动化任务和系统管理任务。

2. Shell 编程的基本语法和用法

2.1 变量

变量是 Shell 编程中最基本的概念之一,变量可以用来存储数据,以后可以通过变量名来引用这些数据。在 Shell 中,变量可以是数字、字符串或任何其他类型的数据。变量赋值时不需要声明数据类型,使用等号(=)进行赋值,例如:

name="Tom"
age=20

变量名可以使用字母、数字和下划线,但不能以数字开头。可以使用 $ 符号来引用变量的值,例如:

echo "My name is $name, and I am $age years old."

2.2 条件语句

条件语句是 Shell 编程中的一种控制结构,用于根据不同的条件执行不同的代码。常见的条件语句有 if 和 case 语句。

if 语句的语法如下:

if condition
then
    commands
elif condition
then
    commands
else
    commands
fi

例如,下面的代码根据用户输入的数字输出对应的等级:

echo "请输入你的分数:"
read score
if [ $score -ge 90 ]
then
    echo "你的等级为 A"
elif [ $score -ge 80 ]
then
    echo "你的等级为 B"
elif [ $score -ge 70 ]
then
    echo "你的等级为 C"
else
    echo "你的等级为 D"
fi

case 语句的语法如下:

case expression in
pattern1)
    commands
    ;;
pattern2)
    commands
    ;;
...
esac

例如,下面的代码根据用户输入的操作符进行计算:

echo "请输入第一个操作数:"
read num1
echo "请输入操作符(+、-、、/):"
read operator
echo "请输入第二个操作数:"
read num2
case $operator in
"+")
result=$(($num1+$num2))
echo "计算结果为:$result"
;;
"-")
result=$(($num1-$num2))
echo "计算结果为:$result"
;;
"")
result=$(($num1*$num2))
echo "计算结果为:$result"
;;
"/")
result=$(($num1/$num2))
echo "计算结果为:$result"
;;
*)
echo "输入的操作符有误!"
;;
esac

2.3 循环语句

循环语句是 Shell 编程中常用的控制结构,用于重复执行某些代码。常见的循环语句有 for 和 while 语句。

for 语句的语法如下:

for var in list
do
    commands
done

例如,下面的代码使用 for 循环输出数字 1 到 10:

for i in {1..10}
do
    echo $i
done

while 语句的语法如下:

while condition
do
    commands
done

例如,下面的代码使用 while 循环输出数字 1 到 10:

i=1
while [ $i -le 10 ]
do
    echo $i
    i=$(($i+1))
done

3. Shell 编程示例

下面是一个简单的 Shell 编程示例:一个计算器程序,可以进行加减乘除运算。程序使用 read 命令获取用户输入的操作数和操作符,使用 case 语句进行计算,同时加入了循环语句和清空输出的功能。

#!/bin/bash

while true
do
    # 清空上次的输出
    clear

    # 提示用户输入第一个操作数
    echo "欢迎使用计算器"
    echo "请输入第一个操作数:"
    read num1

    # 提示用户输入操作符
    echo "请选择操作符:+、-、*、/ 或 q 退出"
    read operator

    # 如果用户选择退出,结束脚本
    if [ "$operator" == "q" ]
    then
        echo "感谢使用计算器"
        exit 0
    fi

    # 提示用户输入第二个操作数
    echo "请输入第二个操作数:"
    read num2

    # 根据用户选择的操作符进行计算
    case $operator in
        "+")
            result=$(echo "$num1 + $num2" | bc)
            ;;
        "-")
            result=$(echo "$num1 - $num2" | bc)
            ;;
        "*")
            result=$(echo "$num1 * $num2" | bc)
            ;;
        "/")
            result=$(echo "scale=2; $num1 / $num2" | bc)
            ;;
        *)
            echo "请选择正确的操作符"
            continue
            ;;
    esac

    # 输出计算结果
    echo "计算结果为:$result"
    read -n 1 -s -r -p "按任意键继续"
done

4. 总结

本篇博客介绍了 Linux 下的 Shell 编程,包括基本语法和用法。通过一个计算器程序的示例,演示了 Shell 编程的基本语法和简单的控制语句,接下来会和大家一起学习。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
书名:《Android编程入门很简单》(清华大学出版社.王勇)。 压缩打包成2部分,这是第1部分。 本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书。本书避免出现云山雾罩、晦涩难懂的讲解,代之以轻松活泼、由浅入深的剖析。这必将使得阅读本书的读者少走弯路,快速上手,从而建立学习Android开发的信心。本书配带1张光盘,收录了重点内容的教学视频(8.7小时多媒体教学视频)和本书涉及的所有源代码。 目录: 第1篇入门必备 第1章初识Android 1.1手机发展简史 1.1.1手机发展的里程碑 1.1.2Android的各个版本 1.2开放手机联盟 1.2.1开放手机联盟的目的 1.2.2分工合作 1.3Android中的个人英雄主义 1.3.1第一届挑战赛冠军介绍 1.3.2第二届挑战赛冠军介绍 1.3.3Androidmarket 1.4Android平台 1.4.1Android体系结构 1.4.2熟悉的开发工具 1.4.3合理的学习曲线 1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse 2.4安装并配置Android SDK 2.4.1 下载Android SDK 2.4.2配置SDK 2.5下载ADT 2.5.1 下载ADT 2.5.2 为Eclipse设置SDK路径 2.6新建模拟器 2.6.1 新建AVD 2.6.2运行模拟器 2.7真机测试 2.7.1安装手机驱动 2.7.2设置手机 2.8 小结 第3章创建第一个程序——helloworld 3.1新建第一个程序 3.1.1新建工程 3.1.2运行程序 3.2认识HelloWodd 3.2.1 首识Android工程 3.2.2认识布局文件 3.2.3认识值文件 3.2.4认识R文件 3.2.5认识注册文件 3.3调试程序 3.3.1 增加断点 3.3.2开始调试 3.3.3单步调试 3.4更多示例程序 3.4.1 导入Samples 3.4.2经典范例 3.5 小结 第4章使用Android工具 4.1使用DDMS 4.1.1 认识DDMS 4.1.2使用进程 4.1.3使用文件浏览器 4.1.4使用模拟器控制 4.1.5 使用日志 4.1.6使用Screen Capture捕捉设备屏幕 4.2 使用Android调试桥 4.2.1使用ADB 4.2.2显示连接到计算机的设备 4.2.3针对特定设备操作 4.2.4启动和停止ADB 4.2.5使用ADB操作文件和apk 4.2.6使用ADB shell 4.3 使用AAPT 4.3.1使用ADT导出签名程序 4.3.2使用命令行生成签名apk文件 4.4小结 第2篇界面开发 第5章探索界面ui元素 5.1认识Android视图、Widget以及布局 5.2必须了解的Widget组件 5.2.1 使用可滚动的文本控件——TextView 5.2.2 TextView中的一些功能 5.2.3 使用可滚动的视图——ScrollView 5.2.4文字的编辑 5.2.5 使用按钮——Button 5.2.6实例——计算器 5.2.7 使用图片按钮——ImageButton 5.2.8 使用复选框——CheckBox 5.2.9实例——请同意本协议 5.2.10 使用单选框——RadioGroup 5.2.11 实例——请选择性别 5.2.12使用下拉列表框——Spinner 5.2.13实例——请选择工作年限 5.2.14实例——动态修改Spinner项 5.2.15 使用进度条——ProgressBar 5.2.16实例——动态修改进度条 5.2.17使用拖动条——SeekBar 5.2.1 8实例——简单使用SeekBar 5.2.19使用图片视图——ImageView 5.2.20实例——ImageView的重叠效果 5.2.21 使用网格视图——GridView 5.2.22实例——通过宫格视图展示相应的应用 5.2.23 使用消息提醒——Toast 5.2.24实例——Toast的4种实现 5.3使用列表视图(ListView&ExpandableListView) 5.3.1 使用列表——ListView 5.3.2通过实例学习列表 5.3.3 使用可扩展列表——EXpalldableListView 5.3.4实例——简单使用ExpandableListView 5.3.5实例——深入使用可扩展列表 5.4使用菜单——Menu 5.4.1 Menu的使用 5.4.2通过实例学习使用Menu 5.5小结 第6章使用程序资源 6.1资源的意义 6.1.1什么是资源 6.1.2怎样存储资源 6.I.3怎样添加资源 6.1.4资源的种类 6.1.5怎样访问资源 6.2使用资源 6.2.1 使用资源管理器 6.2.2使用String资源 6.2.3实例——彩虹和太极 6.2.4使用String数组资源 6.2.5使用Color资源 6.2.6使用Dimension资源 6.2.7使用Drawble资源 6.2.8使用样式 6.2.9使用主题 6.3 小结 第7章设计界面布局 7.1创建界面 7.1.1 使用xml资源创建布局 7.1.2使用代码创建布局 7.2使用布局类 7.2.1使用绝对布局 7.2.2使用线性布局 7.2.3使用框架布局 7.2.4使用表格布局 7.2.5使用关系布局 7.3使用其他布局容器 7.3.1 使用TabActivity 7.3.2 自定义TabHost 7.3.3 使用对话框 7.3.4使用滑动抽屉 7.4 小结 第3篇功能实现 第8章Android应用程序组成 8.1深入理解Activity 8.1.1使用Intent连接Activity 8.1.2 Activity的生命周期 …… 第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人助手 第14章个人轨迹跟踪器
好的,我可以为您介绍一下如何实现一个简单Shell程序。 Shell是一种命令行解释器,它能够解释用户输入的命令并执行相应的操作。Shell程序通常由用户输入命令,Shell解释命令并执行相应的操作,然后Shell等待用户下一个命令的输入。 下面是一个简单Shell程序的实现,主要分为以下几个步骤: 1. 读取用户输入 使用C语言中的fgets函数从标准输入读取用户输入的命令。 2. 解析用户输入 将用户输入的命令按照空格分割成多个部分,如命令名和参数等。 3. 执行用户命令 根据用户输入的命令,使用execvp函数执行相应的系统命令,例如ls、cd等。 4. 循环执行 使用while循环不断地读取用户输入并执行相应的操作,直到用户输入exit命令退出程序。 下面是一个简单Shell程序的代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <string.h> #define MAX_COMMAND_LENGTH 1024 int main() { char command[MAX_COMMAND_LENGTH]; char* args[MAX_COMMAND_LENGTH/2]; while (1) { printf("myshell> "); fflush(stdout); // 读取用户输入 fgets(command, MAX_COMMAND_LENGTH, stdin); // 去掉换行符 command[strlen(command)-1] = '\0'; // 解析用户输入 char* token = strtok(command, " "); int i = 0; while (token != NULL) { args[i++] = token; token = strtok(NULL, " "); } args[i] = NULL; // 执行用户命令 pid_t pid = fork(); if (pid == -1) { printf("fork failed\n"); } else if (pid == 0) { execvp(args[0], args); exit(0); } else { wait(NULL); } // 处理exit命令 if (strcmp(args[0], "exit") == 0) { break; } } return 0; } ``` 上面的代码中使用了fork函数创建一个新的子进程,并使用execvp函数执行用户命令。在子进程中调用execvp函数后,进程的内存空间将被覆盖为新程序的内存空间。因此,在子进程中调用exit函数退出程序。 在主进程中,使用wait函数等待子进程执行完毕。wait函数将暂停当前进程的执行,直到其子进程结束后恢复执行。 以上就是一个简单Shell程序的实现。当然,实际上Shell程序的实现要比这个复杂得多,因为需要考虑很多其他的因素,例如I/O重定向、管道、变量替换等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想广东收租

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值