日期:2014-05-16  浏览次数:20668 次

linux script初学小结

前言

第一次写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了,是不是很酷?

1楼boyxulin1986昨天 17:37
自己必须顶自己