shell脚本学习指南[一](Arnold Robbins & Nelson H.F. Beebe著)

 更新时间:2014年02月27日 14:44:22   作者:  
这篇文章主要介绍了shell脚本学习指南[一]Arnold Robbins & Nelson H.F. Beebe著,需要的朋友可以参考下

第一章略过,下边从第二章开始,大家懂得。
ps:这里发生了一件非常当我蛋疼的事情,非常!已经码文章码到第四章了,悲剧的按错浏览器按钮刷新掉,怎么也找不回来之前写的东西了。想死!算了,复习一边吧。以下全文均属自己总结书写,有错误的地方也未必是书中错误(当然也有可能是书中错误,但是我都会亲自操作滴),可能是我写错,请大牛指正。

第二章入门

因为第二遍写,就简单快速的写吧,尽量写清楚。大家都知道的终端命令cd啊 chmod啊 who啊之类的组合在一起加上一些控制语句,变量什么的就成shell编程了,给出一个简单例子:

复制代码 代码如下:

$ cat > nusers
#! /bin/sh
who | wc -l
^D
$ chmod +x nusers
$ ./nusers

上边就是nusers文件就是一个完整的shell脚本了,功能是查询多少用户登录系统。cat >nusers 重定向到nusers文件输入数据流, #! 这句 ,#号之后都是注释,但是#!是会被解释器读取的,因为这句告诉了系统应该使用什么解释器,这里就是 /bin/sh 。^D是按ctrl+d 结束输入,chmod增加可执行权限,最后就是运行自己写的脚本。这样就是一个完整的编写到运行使用的过程了。你入门了木有?(额~如果木有的话,那换个文章再看看吧)

现在我们来改进一下,为了让我们执行自己的程序更像系统内建命令那样,我们可以修改系统环境变量PATH,修改过windows的童鞋都知道,linux也一样,是为了让系统搜索命令的时候有个搜索路径依据。你可以输出一下看看先:echo $PATH .结果就是输出一大串以:为分隔符的字符串,我们给他重新赋值,假设我们编写的shell代码存在用户目录下的myshell文件夹内,那么我们就这样赋值: PATH=$PATH:$HOME/myshell 这样我们就可以直接运行nusers命令获得用户登录数目的信息了。

这里学习两个命令,不好意思你想错了,不是who 和 wc,而是从最基本的输出hello,world开始嘛,所以先学echo和printf,前者十分简单,会输出所有参数,如:echo hello,world 。会c语言的朋友可以开心了,因为你不用再学习printf了,机会完全一样,比如:printf "hello,%s\n",world ,这样就会输出hello,world然后换行(不会有不会c的童鞋吧?)。

另外再说一下之前出现的 > | < (不是表情 - -! (这个是)),这是基本的I/O重定向了,用过windows里cmd命令并且知道的也可以跳过了。 > 输出重定向 。 <输入重定向 。 | 管道,会把符号前的输出信息当作符号后的输入信息。另外还有>> << ,与单个的区别就是单个的会覆盖原本存在的文件,没有就创建。双个的不会覆盖,只在已有的文件后边增添。

为了练习这个重定向,学习一个tr命令,主要用于转换删除浓缩字符。
语法:tr [options] source-char-list replace-char-list
选项:-c 取source反义,即tr要转换的字符未列在source里,通常-d -s配合使用
-d 自标准输入删除source-char-list里所列的字符,而非转换。
-s 浓缩重复的字符。
简易配合重定向练习练习。看看怎么浓缩的,怎么替换的。

这里介绍两个特殊文件:/dev/null 和 /dev/tty,前者传送到此文件的数据都会被系统丢弃,类似垃圾桶。从中读取数据则只能读到null。另一个/dev/tty,当程序打开此文件时,linux会自动将它重定向到一个终端(控制台或串行口或一个网络与窗口登录的伪终端等)再与程序结合。这在程序必须读取人工输入时特别有用,也可以用来产生错误信息。例:

复制代码 代码如下:

printf "Enter new password:" #提示输入
stty -echo #关闭自动打印输入字符功能
read pass < /dev/tty #读取密码
printf :Enter again:" #再次提示输入
read pass2 < /dev/tty #再次读取
stty echo #打开自动打印输入字符功能

stty(set tty)命令用来控制终端(或窗口)的各种设置。

现在已经能够写自己的shell脚本,也能够像系统内建命令一样调用了,但是还缺点什么,对,就是传参数,给自己的脚本程序传递参数,使有更丰富的功能实现。

脚本里参数获取很简单,第一个参数就是$1,第二个$2,但是超过9的都用大括号把数字括起来,如${10}。下边写个完整的脚本程序:

复制代码 代码如下:

$ cat > finduser
#! /bin/sh
#finduser ---查看指定用户是否登录
who | grep $1
^D
$ chmod +x finduser
$ finduser root

前提是前边你也该过环境变量PATH。(不知道怎么改请往前找)

我们已经能够写一些脚本的,但是难免会出错,不能达到预期,我们需要像c++那样debug,可以直接在命令行里执行sh -x finduser 来打开执行跟踪功能。
也可以在脚本里用set -x命令将执行跟踪的功能打开,然后再用set +x来关闭该功能。

个人原创,转载请注明:三江小渡

相关文章

  • linux文件目录默认权限(详解)

    linux文件目录默认权限(详解)

    下面小编就为大家带来一篇linux文件目录默认权限(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • linux用户与文件基础命令介绍(1)

    linux用户与文件基础命令介绍(1)

    这篇文章主要为大家详细介绍了linux用户与文件基础命令,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Linux grep -q用法示例详解

    Linux grep -q用法示例详解

    grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来,这篇文章主要介绍了Linux grep -q用法示例详解,需要的朋友可以参考下
    2023-02-02
  • 入门shell脚本基础及原理

    入门shell脚本基础及原理

    弄懂shell程序,源代码,以及python脚本能够向运维开发方向走,shell程序能够管理集群,提高开发的效率,shell是命令解释器,调用系统内核,帮助你对内核的刷新认识
    2021-09-09
  • linux whatis与whatis database 使用及查询方法(man使用实例)

    linux whatis与whatis database 使用及查询方法(man使用实例)

    在学习man命令时候,估计很多朋友都发现有man –f ,man –k 参数,可以查出很多数据。这些有的与man手册页相同,有些不是属于手册页的。它们数据怎么收集来的,并且whatis是怎么样工作的
    2015-10-10
  • shell脚本字符串处理的使用(分割、截取和拼接)

    shell脚本字符串处理的使用(分割、截取和拼接)

    本文主要介绍了shell脚本字符串处理的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Shell脚本实现判断IP地址是否在一个ip段内代码分享

    Shell脚本实现判断IP地址是否在一个ip段内代码分享

    这篇文章主要介绍了Shell脚本实现判断IP地址是否在一个ip段内代码分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-06-06
  • 编写shell脚本将VPS上的数据备份到Dropbox网盘的方法

    编写shell脚本将VPS上的数据备份到Dropbox网盘的方法

    这篇文章主要介绍了编写shell脚本将VPS上的数据备份到Dropbox网盘的方法,注意Dropbox在国内访问的网络相关问题,需要的朋友可以参考下
    2015-07-07
  • linux 获取文件名称并生成列表txt的方法

    linux 获取文件名称并生成列表txt的方法

    今天小编就为大家分享一篇linux 获取文件名称并生成列表txt的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Shell脚本实现进度条的两种方式

    Shell脚本实现进度条的两种方式

    本文主要介绍了Shell脚本实现进度条的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论