shell 脚本从零实战——终端显示

本贴最后更新于 1866 天前,其中的信息可能已经时移俗易

1.用 vim 编写第一个脚本:
vim helloworld.sh

脚本内容如下:

#!/bin/bash

# 第一行被称作 shebang ,脚本在运行时,内核会读取首行,识别出 /bin/bash

# 然后执行脚本

  
echo  "hello world!"

2.执行脚本
2.1 bash helloworld.sh
2.2 授予脚本执行权限,然后执行:
chmod 755 helloworld.sh
./helloworld.sh 这里的 . 表示当前目录
或者用全路径来执行:/home/tom/helloworld.sh

3.登录 linux 时,会启动一个 shell 窗口给用户进行交互式输入。在启动一个 shell 的过程中,会执行当前用户目录中的 .bashrc 文件,或者是 .bash_profile 文件。所以,对于一些需要提前设置的命令可以放在 .bashrc 文件,或者是 .bash_profile 文件中,如修改环境变量 PATH:echo "PATH=$PATH:~/bin" >> ~/.bashrc

~/.bash_history 保存了用户运行过的命令

4.一次运行多次命令

mkdir test;cd test

上面的命令等同于下面:

mkdir test
cd test

5.再次探讨 echo 命令:
5.1 不用单/双引号:

[root@localhost ~]# echo welcome to bash
welcome to bash
[root@localhost ~]# echo "welcome to bash"
welcome to bash
[root@localhost ~]# echo 'welcome to bash'
welcome to bash

上面的命令执行都没有问题。下面我们再执行一条:

[root@localhost ~]# echo welcome to bash!
welcome to bash!
[root@localhost ~]# echo 'welcome to bash!'
welcome to bash!
[root@localhost ~]# echo "welcome to bash!"
-bash: !": event not found

可以看到,字符串中用了 ! 时会报错。这是因为像 !,; 等这种符合在 shell 中都是特殊字符,有着特殊含义。在使用 echo 命令时,如果使用了双引号,那么就要对特殊字符进行转义,如:

[root@localhost ~]# echo "welcome to bash\!"
welcome to bash\!

在 shell 中,

  1. !号具有执行某条历史命令的作用,如:
    !59 表示执行第 59 条命令
    !! 表示执行上一条命令
  2. ;号表示两条命令的分隔,如上面第 4 点提到的

6.echo 命令的一些说明
6.1 默认情况下,echo 会在输出文本的尾部追加一个换行符,可以使用 -n 来禁止这种行为:

[root@localhost ~]# echo test
test
[root@localhost ~]# echo -n test
test[root@localhost ~]# 

6.2 当双引号中的字符串需要转义时,如何使用?使用 -e 选项 :

[root@localhost ~]# echo -e "1\t2\t3"
1	2	3
[root@localhost ~]# 

7.另一个终端打印命令:printf
编写脚本如下:vim printf.sh

#!/bin/bash

printf  "%-5s %-10s %-4s\n" No Name Mark

printf  "%-5s %-10s %-4.2f\n" 1 Apple 90.555

printf  "%-5s %-10s %-4.2f\n" 2 Boy 84.33

printf  "%-5s %-10s %-4.2f\n" 3 Cat 79.66

执行脚本:

[root@localhost ~]# vi printf.sh
[root@localhost ~]# bash printf.sh 
No    Name       Mark
1     Apple      90.56
2     Boy        84.33
3     Cat        79.66

脚本说明:

1. %s,%c,%d,%f都是格式替换符,定义了该如何打印后续的参数。
2. %-5s 指明了一个格式为左对齐且字符串宽度为5的字符替换(- 表示左对齐)。如果不用 - 就表示右对齐。宽度指定了某个字符串的字符数量。脚本中,对Name而言,其宽度为10,超过10个则取前10个,不足10个,空格补足
3. 对Mark字段,我们设置为 %-4.2f ,其中 .2 指定保留两位小数。
4. 每一行的字符串后面都跟了一个换行符(\n)
5. 如果你学过c语言,你肯定发现了 printf命令 的使用和 c 语言的 printf 函数的使用是一样的
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    926 引用 • 937 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 1 关注
  • 分享

    有什么新发现就分享给大家吧!

    246 引用 • 1781 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 615 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 1 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    263 引用 • 664 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 714 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 193 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖 • 1 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 651 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 660 关注
  • abitmean

    有点意思就行了

    31 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    46 引用 • 40 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 590 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 31 回帖 • 9 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 1 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    88 引用 • 897 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    487 引用 • 908 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 565 关注
  • CodeMirror
    1 引用 • 2 回帖 • 127 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 562 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注