一个简单的脚本
wu@ubuntu:~$ who
wu :0 2016-11-12 08:03 (:0)
wu pts/7 2016-11-13 00:42 (:0)
如果系统用户很多,这时候使用wc -l统计用户数:
wu@ubuntu:~$ who | wc -l
2
| (管道)符号可以在两个程序之间建立管道,who的输出成为wc的输入,wc列出的结果就是已登录的用户数量
将此管道转变成一个独立的命令,然后放在一个文件,最后使用chmod为该文件设置执行的权限,如下:
wu@ubuntu:~$ cat > test
who | wc -l
^D
wu@ubuntu:~$ chmod +x test
wu@ubuntu:~$ ./test
2
开发小型shell脚本的开发周期小结:
直接在命令行测试,一旦找到能够完成工作的语法,再将它们放进一个独立的脚本里面,再为该脚本设置执行权限,之后就能直接使用该脚本。
最典型的shell脚本开头:#! /bin/sh
本文地址:http://wuyudong.com/2016/11/16/3042.html,转载请注明出处。
Shell的基本元素
1、命令与参数
举个例子:
wu@ubuntu:~$ cd ~/opt/Cproject ; ls -l test.c
-rw-rw-r– 1 wu wu 278 Oct 21 04:14 test.c
使用空格隔开各个组成部分,命令名称在最前面,后面跟着选项,额外的参数放在选项后,选项的开头是一个破折号,可能需要加上参数,例如:gcc test.c -o test。分号被用来分隔同一行的多条命令,shell会依次执行这些命令
2、变量
变量就是为某个信息片段所起的名字,变量的长度没有限制,变量赋值的方式如下:
变量名=值,之间没有空格,取变量的时候在变量名前面加上$,单行 可以多次赋值,当所赋之值含空格的时候,加上双引号,例如:
a1=a a2=b a3=c full="a b c" d=$full
3、简单的echo输出
echo的命令就是为了产生输出
wu@ubuntu:~$ echo wu yu dong
wu yu dong
wu@ubuntu:~$ echo “Enter your name: ”
Enter you name:
wu@ubuntu:~$ echo -n “Enter your name: ”
Enter your name: wu@ubuntu:~$
加上参数-n表示会忽略结尾的换行符号,关于转义命令很多,需要使用的时候可以到网上查找
echo在版本上的差异,导致Unix版本间可移植性问题
4、printf输出
printf命令几乎复制了C语言该函数的所有的功能
wu@ubuntu:~$ printf “wu yu dong\n”
wu yu dong
5、基本的I/O重定向
默认的标准输入、标准输出以及标准错误输出都是终端,通过cat得知:
wu@ubuntu:~$ cat
wuyudong
wuyudong
hello
hello
good
good
^D
Shell提供了几种改变默认I/O来源端与目的端的语法标记
重定向与管道
以 < 改变标准输入
program < file可将program的标准输入改为file:
tr -d ‘\r’ < dos-file.txt …
以 > 改变标准出
program > file可将program的标准输出改为file:
tr -d ‘\r’ < dos-file.txt > unix-file.txt
注意:如果目标文件不存在,则新建一个,如果存在则覆盖
以 >> 附加到文件
program >> file 可将program的标准输出附加到 file的结尾处:
for f in dos-file.xt do tr -d '\r' < $f >> big-unix-file.txt done
注意:如果目标文件不存在,则新建一个
以 | 建立管道
program1 | program2 可将program1的标准输出修改为program2的标准输入:
管道可以把两个以上的程序衔接在一起,管道可以使得执行速度比用临时文件的程序快上10倍,通过管道可以构建复杂的程序,比如:
tr -d ‘\r’ < dos-file.xt | sort > unix-file.txt
6、基本命令查找
shell会沿着查找路径$PATH来寻找命令,$PATH是一个以冒号分隔的目录列表,可以在列表指定的目录下找到所要执行的命令。所找到的命令可能是编译后的可执行文件,也可能是shell脚本,从用户的角度并无不同。
wu@ubuntu:~$ echo $PATH
/home/wu/opt/apache-maven-3.0.4/bin:/home/wu/opt/apache-ant-1.8.3/bin:/home/wu/opt/jdk1.6.0_37/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/wu/opt/hbase-0.92.1/bin
名称为bin的目录用来保存可执行文件,如果你要编写自己的脚本,可以准备一个自己的bin目录,并且让shell能够自动找到它们:
wu@ubuntu:~$ cat > test.sh
#! /bin/sh
who | wc -l
wu@ubuntu:~$ chmod +x test.sh
wu@ubuntu:~$ cd
wu@ubuntu:~$ mkdir bin
wu@ubuntu:~$ mv test.sh bin
wu@ubuntu:~$ PATH=$PATH:$HOME/bin
wu@ubuntu:~$ test.sh
2
PATH的设置是临时有效的,重启计算机后就会失效,要想永久生效,在/etc/profile里面使用root权限添加:
PATH=$PATH:$HOME/bin
重启电脑即可生效
Comments