一个简单的shell脚本

一个简单的shell脚本

编写

假设我想知道目前系统上有多少人登录,使用who命令可以告诉你现在系统有谁登录:

1.[KANO@kelvin ~]$ who
2.KANO tty1 2016-02-15 01:47 (:0)
3.KANO pts/0 2016-02-15 01:48 (kelvin)

当然在个人电脑上,所列出来的列表可能只有上面这么短。但是在一些大型、多用户的系统上,所列出的列表就可能很长。这个时候我们可以使用自动计算用户总数。wc是一个字数计算程序,它可以计算出行数(line)、字数(word)和字符数(character)。

我们用wc -l用以算出行数,表示已登录的用户数

1.[KANO@kelvin ~]$ who|wc -l
2.2

next,我们将此管道转变成一个独立的命令。

1.[KANO@kelvin ~]$ cat>nusers   #建立文件,使用cat复制终端的输入
2.who|wc -l #程序内容
3.^D #ctrl+D表示end-of-file
4.[KANO@kelvin ~]$ chmod +x nusers #让文件拥有执行的权限
5.[KANO@kelvin ~]$ ./nusers #执行测试
6.2 #输出结果

一个小型化shell脚本的典型代表开发周期:

  1. 直接在命令行(command line)上测试
  2. 找到能够完成工作的适当语法,再将它们放进一个独立的脚本里,并设置执行权限
  3. 直接使用该脚本

完善

我们的nusers shell脚本并非是编译型程序,因此当shell要求内核执行它时,内核将会报错”executable format file”(不是可执行的格式文件)。shell收到此报错信息时,才会启动一个新的/bin/bash副本来执行该程序。系统只有一个shell时,退回机制是非常方便的。但一般来说我们的系统都会有好几个shell,因此需要通过脚本文件中第一行设置#!来告知内核应该以哪个shell来执行所指定的shell脚本。

1.[KANO@kelvin ~]$ cat nusers 
2.#! /bin/bash -
3.
4.who|wc -l

其中选项——表示没有shell选项,这是基于安全上的考虑,可避免某种程度的欺骗式攻击(spoofing attack)。

一个简单的shell脚本的更多相关文章

  1. 如何在linux下编写一个简单的Shell脚本程序

    在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...

  2. 一个简单的Shell脚本(解决windows上文本在macos上乱码问题)

    之所以有这一篇文章,是因为之前我写过的一篇文章:“解决Mac上打开txt文件乱码问题”:传送门: https://www.cnblogs.com/chester-cs/p/11784079.html ...

  3. 自动化运维:(3)写一个简单的Shell脚本(案例)

    一.需求 1.test.sh 脚本执行时候需要添加参数才能执行 参数和功能详情如下: 参数 执行效果 start 启动中... stop 关闭中... restart 重启中... * 脚本帮助信息. ...

  4. Linux系统学习笔记之 1 一个简单的shell程序

    不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...

  5. 一个简单的ETL脚本的内容

    一个简单的ETL脚本应该包含如下内容 1.注释 2.设置字符集 3.基础路径参数 脚本路径 票据路径 日志路径 当前SHELL的脚本别名:declare SHELL_NAME=“${basename ...

  6. 如何写一个简单的shell

    如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...

  7. 一个简单的appium脚本

    这是一个简单的appium脚本,测试amazon购物过程的,过程包括搜索商品,然后从结果列表中选取中意的商品,然后加入购物车,等等. 它是一个最原始的脚本,对测试元素.数据.报告等未作任何的封装,后面 ...

  8. python定义的一个简单的shell函数的代码

    把写代码过程中经常用到的一些代码段做个记录,如下代码段是关于python定义的一个简单的shell函数的代码. pipe = subprocess.Popen(cmd, stdout=subproce ...

  9. 手动编写一个简单的loadrunner脚本

    loadrunner除了自动录制脚本外,还可以手动编写脚本,通过右键+inset step添加步骤,还可以手动添加事务,集合点等 下面是一个简单的Action脚本,服务是运行在本机的flask服务: ...

随机推荐

  1. 计算一个数组里的重复值并且删去(java)

    主要思想: 数组可以无序 假设数字里的值都为正 循环判断数组 如果与前面的数字相同则变为-1 然后记录-1的个数算出重复值 然后重新new一个减去重复值长度的新数组 和原数组判断 不为-1的全部复制进 ...

  2. outlook 2007 IMAP设置和配置

    以Outlook2007为例(Outlook2003操作基本类似).  1.依次点击“工具”>“帐户设置”. 2.在“帐户设置”页中点击“新建”> 不需要做任何选择,点击下一步. 3.填写 ...

  3. java中的xpath,读取xml文档。

    1,入门 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力.起初 X ...

  4. 在Javascript中使用String.startsWith和endsWith

    在Javascript中使用String.startsWith和endsWith 在操作字符串(String)类型的时候,startsWith(anotherString)和endsWith(anot ...

  5. MySQL的基本数据类型与数据类型优化

    1.选择优化的数据类型的标准 1)更小的通常更好. 一般情况下,应该尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,因为他们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期 ...

  6. Ajax XMLHttpRequest对象的三个属性以及open和send方法

    (1)onreadystatechange 属性onreadystatechange 属性存有处理服务器响应的函数.下面的代码定义一个空的函数,可同时对 onreadystatechange 属性进行 ...

  7. UVA 11134 Fabled Rooks

    贪心+优先队列+问题分解 对x,y 分开处理 当 xl<cnt(当前处理行)时,不能简单的选择cnt,而是应该让xl=cnt 并重新加入优先队列.(y的处理同上) #include <io ...

  8. python学习day10

    目录 Twisted Redis RabbitMQ   Twisted   事件驱动 事件驱动分为两个部分:第一,注册事件:第二,触发事件. 自定义事件启动框架,命名为:"弑君者" ...

  9. QNDTU外壳及开发板

        昨天从淘宝上淘来了个DTU外壳,翻出来之前的STM32开发板和GPRS模块开发板,今天准备复习一下开发板,把裸板跑起来.     晒一下装备:     两块开发板:           51n ...

  10. (六)boost库之内存管理shared_ptr

    (六)boost库之内存管理shared_ptr 1.shared_ptr的基本用法 boost::shared_ptr<int> sp(new int(10)); //一个指向整数的sh ...