日期:2014-05-16 浏览次数:20779 次
前言
第一次写linux script,有点紧张。
1. 写一个寻找特定用户的script?
#! /bin/sh
# check the specified user is logged or not
who | grep $1
(1)script第一行用来告诉kernel去使用/bin/sh来解释这个script。
通常你的linux系统都会支持好几种shell,而每个用户会预设
哪一种shell都会在/etc/passwd这个档案中进行配置。
从下面的命令执行结果来看,果然与预期相吻合。
sh-3.2# echo $0
/bin/sh
sh-# ls /bin/*sh
/bin/bash /bin/sh
sh-# cat /etc/passwd
root:x:0:0:root:/basic:/bin/sh
sh-# id
uid=0(root) gid=0(root)
(2)linux不会去解释以#开头的行,通常以#开始的行作为script的注释。
(3)$1则是执行脚本命令时带入的命令行参数,例如
sh-# find_user me
用来查看当前的系统中是否有me这个用户登入。
2. 当script写好后,是无法直接运行的,为什么?
直接运行,就会出现如下的错误信息:
sh-# ./find_user me
sh: ./find_user: Permission denied
从错误信息来看,应该是find_user这个文件不具备可执行的权限。
使用ls -l进行检查,果不其然这个文件的权限为644,不具有可执行权限。
sh-# ls -l find_user
-rw-r--r-- 1 root root 9 Jan 1 00:15 find_user
3. 那我们要怎样让其变成可执行呢?
chmod可以用来改变文件的权限:
sh-# chmod 755 find_user
sh-# ls -l find_user
-rwxr-xr-x 1 root root 9 Jan 1 00:15 find_user
你可以发现文件权限变成755了,./find_user执行这个脚本果然没问题。
4. 为什么文件的默认权限是644?
这跟umask的设定有关,
sh-# umask
0022
umask的值是可更改的。
关于umask相关的部分,在后续可能会做更深入的学习和分析。
5. script写好了要怎么管理?
假设你写了好多script工具,那你该如何管理它们呢?
如果每次执行一个脚本命令都需要靠绝对路径来执行,那会不会很麻烦呢?
所以建议用户将自己编写的工具都放在同一个地方,比如/usr/bin或者用户喜欢的某个目录下,
然后再使用 export PATH=$PATH:/usr/bin将/usr/bin加到PATH中。
试一下你可以在任何路径下都可以执行find_user了,是不是很酷?