在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第一章略过,下边从第二章开始,大家懂得。 第二章入门 复制代码 代码如下: $ 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命令,主要用于转换删除浓缩字符。 这里介绍两个特殊文件:/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 来打开执行跟踪功能。 个人原创,转载请注明:三江小渡 |
请发表评论