bash脚本编程入门

对Unix的最初希望之一是,它将使日常的计算机用户能够微调其计算机以适应其独特的工作风格。 在过去的几十年中,对计算机定制的期望已经降低,许多用户将他们收集的应用程序和网站视为他们的“定制环境”。 原因之一是许多操作系统的组件未打开,因此普通用户无法使用其源代码。

但是对于Linux用户而言,自定义程序是可以实现的,因为整个系统都基于可通过终端获得的命令。 该终端不仅是用于快速命令或深入故障排除的界面; 这是一个脚本环境,可以通过为您处理日常任务来减少您的工作量。

如何学习编程

如果您以前从未做过任何编程,可能会遇到两个不同的挑战,这可能会有所帮助:一个是了解代码的编写方式,另一个是了解编写的代码。 你可以学习语法 -但你不会不知道什么话都可以对你的语言跑远。 在实践中,您一次就开始学习这两个概念,因为如果没有单词安排就无法学习语法,因此最初,您将使用基本命令和基本编程结构编写简单的任务。 一旦熟悉了基础知识,就可以探索更多的语言,从而使程序可以做越来越重要的事情。

在Bash中 ,您使用的大多数单词是Linux命令。 语法是Bash。 如果您已经经常使用Bash,则向Bash编程的过渡相对容易。 但是,如果您不使用Bash,您将很高兴地了解到它是为清晰和简单而构建的简单语言。

互动设计

有时,学习编程时最难弄清的事情就是计算机可以为您做些什么。 显然,如果一台计算机可以自己完成所有操作,那么您就不必再触摸计算机了。 但是现实是人类很重要。 找到您的计算机可以帮助您的事情的关键是注意整个星期中重复执行的任务。 计算机对重复的处理特别好。

但是要使您能够告诉计算机执行某项操作,您必须知道如何执行此操作。 这是Bash擅长的领域:交互式编程。 在终端中执行动作时,您还将学习如何编写动作脚本。

例如,我曾经负责将大量PDF书籍转换为墨水不足和打印友好的版本。 一种方法是在PDF编辑器中打开PDF,从数百张图像(算作图像的页面背景和纹理)中选择每张图像,然后删除它们,然后将其保存到新的PDF中。 这样一本书只需要半天。

我的第一个想法是学习如何编写PDF编辑器脚本,但是经过数天的研究,我找不到可以编写脚本的PDF编辑应用程序(非常难看的鼠标自动化技巧)。 因此,我将注意力转向了从终端内部找出完成任务的方法。 这导致了一些新发现,包括GhostScript,PostScript的开源版本(打印机语言PDF所基于)。 通过使用GhostScript处理几天的任务,我确认这是解决我的问题的方法。

制定基本的脚本来运行命令仅是复制命令和我用来从PDF中删除图像并将其粘贴到文本文件中的选项的问题。 据推测,将文件作为脚本运行会产生相同的结果。

将参数传递给Bash脚本

在终端中运行命令与在Shell脚本中运行命令之间的区别在于,前者是交互式的。 在终端中,您可以随时进行调整。 例如,如果我刚刚处理了example_1.pdf并准备处理下一个文档,以适应我的命令,则只需要更改文件名即可。

脚本的存在是为了您不必照看它。 这就是命令(以及运行它们的shell脚本)接受参数的原因。

在Shell脚本中,有一些预定义的变量可以反映脚本的启动方式。 初始变量为$ 0 ,它代表发出的启动脚本的命令。 下一个变量是$ 1 ,它表示传递给shell脚本的第一个“参数”。 例如,在命令echo hello中 ,命令echo$ 0,单词hello$ 1 。 在命令echo hello world中 ,命令echo$ 0hello$ 1world$ 2

在交互式外壳中:

$ echo hello world
hello world

在非交互式shell脚本中,您可以以非常直观的方式执行相同的操作。 将此文本键入文本文件并将其另存为hello.sh

 echo hello world 

现在运行脚本:

$ bash hello.sh
hello world

那行得通,但是并没有利用脚本可以接受输入这一事实。 将hello.sh更改为:

 echo $1 

运行两个带引号的参数一起运行的脚本:

$ bash hello.sh "hello bash"
hello bash

对于我的PDF缩减项目,我真的需要这种非交互性,因为每个PDF都花了几分钟来压缩。 但是,通过创建一个接受我的输入的脚本,我可以一次将几个PDF文件全部提交给脚本。 该脚本按顺序处理了每个脚本,这可能需要半小时或更长时间,但是我可以用半小时来完成其他任务。

流量控制

创建Bash脚本是完全可以接受的,从本质上讲,它是完成需要重复的任务的确切过程的笔录。 但是,可以通过控制信息流过脚本的方式来使脚本更强大。 管理脚本对数据的响应的常用方法是:

  • 如果/那么
  • for循环
  • while循环
  • 案例陈述

计算机不是智能的,但是它们擅长比较和解析数据。 如果您在脚本中进行一些数据分析,则脚本会变得更加聪明。 例如,基本的hello.sh脚本将运行是否有任何回声:

$ bash hello.sh foo
foo
$ bash hello.sh

$


如果在未收到任何输入时提供帮助消息,将会更加用户友好。 那是一个if / then语句,如果您以一种基本的方式使用Bash,则您可能不知道Bash中是否存在这样的语句。 但是编程的一部分是学习语言,通过一些研究,您将了解if / then语句:

if [ "$1" = "" ] ; then
echo "syntax: $0 WORD"
echo "If you provide more than one word, enclose them in quotes."
else
echo "$1"
fi

运行此新版本的hello.sh会导致:

$ bash hello.sh
syntax: hello.sh WORD
If you provide more than one word, enclose them in quotes.
$ bash hello.sh "hello world"
hello world

通过脚本工作

无论您是要从PDF文件中删除图像,还是要管理杂乱的Downloads文件夹,还是要创建和配置Kubernetes图像,都需要学习编写Bash脚本,这是使用Bash然后学习采用这些脚本的方法从仅命令列表到响应输入的内容。 通常这是一个发现过程:您一定会找到新的Linux命令来执行您无法想象的可以通过文本命令执行的任务,并且您将找到Bash的新功能以使您的脚本适应您想要的所有不同方式他们跑。

学习这些技巧的一种方法是阅读其他人的脚本。 了解人们如何在其系统上自动化死记号命令。 查看您所熟悉的事物,并查找有关陌生事物的更多信息。

另一种方法是下载我们的Bash电子书编程简介 。 它向您介绍了特定于Bash的编程概念,并且通过学习到的构造,您可以开始构建自己的命令。 当然,它是免费下载的,并根据Creative Commons许可进行许可,因此,请立即获取副本。

下载我们的Bash电子书编程简介!

翻译自: https://opensource.com/article/20/4/bash-programming-guide

bash脚本编程入门

bash脚本编程入门_Bash编程入门相关推荐

  1. apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本

    说明:本文是对Vamei知乎文章<快速学习Bash>(https://zhuanlan.zhihu.com/p/32692644)一文的学习笔记,根据个人理解调整了内容顺序,补充了一些注释 ...

  2. python编程零基础-如何零基础入门Python编程?

    Python目前已经成为最受欢迎的编程语言之一,吸引了一大批粉丝,但是很多人在要跨入的时候犹豫了,原因竟然是觉得零基础学习Python太难了,真的是这样吗?零基础入门Python编程学习有什么好的技巧 ...

  3. python怎么样才算入门编程-新手如何快速入门Python编程?听过来人说经验!

    新手如何快速入门Python编程?站在别人的肩膀上总是要快些的,如果你不借鉴前人的经验,那么前人踩过的坑你也会踩,所以来看看吧: Python是一种编程语言,可以用来做网站.写自动化测试脚本.做数据分 ...

  4. python如何编程-如何入门Python编程

    Python目前已经成为受欢迎的编程语言之一,吸引了一大批粉丝,但是很多人在要跨入的时候犹豫了,原因竟然是觉得学习Python太难了,真的是这样吗?入门Python编程学习有什么好的技巧吗? Pyth ...

  5. python快速编程入门黑马-新手如何快速入门Python编程?/开发python入门教程

    Python从入门到实践的教程是什么? 第一阶段Python与Linux数据这是Python的入段,也是帮助零基础学员打好基础的重要阶段,让零基础学员可以具备基础的编程能力,并掌握MySQL进阶内容. ...

  6. 0基础如何入门Python编程

    Python目前已经成为最受欢迎的编程语言之一,吸引了一大批粉丝,但是很多人在要跨入的时候犹豫了,原因竟然是觉得零基础学习Python太难了,真的是这样吗?零基础入门Python编程学习有什么好的技巧 ...

  7. 半小时入门MATLAB编程入门基础知识:

    https://learnxinyminutes.com/docs/zh-cn/matlab-cn/ 半小时入门MATLAB编程入门基础知识: % 以百分号作为注释符 %{ 多行注释 可以 这样 表示 ...

  8. 第三章 matlab学习入门之编程基础

    系列文章目录 第三章 matlab学习入门之编程基础 在这一章,你会学到的知识: 变量与语句: 程序控制: M文件: 脚本: 函数: 变量检测: 程序调试: 文章目录 系列文章目录 前言 一.变量与语 ...

  9. go语言编程入门_Go编程入门

    go语言编程入门 Go Programming language was designed by Google in 2007 by Robert Griesemer, Rob Pike, and K ...

最新文章

  1. php.ini安全配置详细解释
  2. MySQL 关于毫秒的处理
  3. 7.Redis常用命令:ZSet
  4. Java新手小程序之三
  5. HTML学习感想(4)【密码输入框、单选、复选框】
  6. AS主题+配置备份+Logcat颜色配置
  7. 全球及中国软磁镍合金行业供需前景与投资策略研究报告2022版
  8. matlab simulink笔记05 —— 积分模块
  9. 为什么 ASP.NET Core WebAPI 继承 ControllerBase 而不是 Controller ?
  10. php学习日志(3)-echoprint
  11. SpringCloud工作笔记089---SpringBoot中Mybatis使用Condition_Criteria如何筛选日期类型数据
  12. linux 新增文件夹记录_linux文件系统(基础概念)
  13. 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换
  14. SSAS实践问题记录--后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。
  15. halcon学习之图像增强、平滑和去噪
  16. 如何在macOS中查找和删除潜在的驱动程序冲突?
  17. mysql 为什么性能不稳定_浅谈MySQL 数据库性能优化
  18. c语言判断sjis编码,loadrunner Web_类函数之web_sjis_to_euc_param()
  19. 首都机场t2长期停车收费,首都机场t2停车场过夜价格表
  20. 孙子兵法始计篇读后感&心得(上)

热门文章

  1. java设置首页跳转_SpringBoot设置首页(默认页)跳转功能的实现方案
  2. java 反射 速度_Java 反射获取类方法速率和实现方式
  3. UsernamePasswordAuthenticationFilter源码分析
  4. Exchange Server导出共存环境下的邮箱列表
  5. 关于SpringCloud微服务云架构构建B2B2C电子商务平台之- Spring Cloud集成项目简介(三)...
  6. 经常使用的正则表达式
  7. mac 安装brew及设置国内镜像
  8. angular.js的路由和模板在asp.net mvc 中的使用
  9. PHP微信公众平台源码 支持多账号 仿pigcms 小猪微信 已经修改完毕 完整可用
  10. (转)Android IPC机制详解