第一个服务器脚本
最近由于业务需求,要查询保存在服务器日志里的小程序数据,每周要查七天的数据,每天还另有四种渠道。每种渠道还有三种情况,每种情况又要分PV和UV。重复的工作太多太多,所以在手写了几天之后,我终于受不了了!我决定写个脚本来摆脱这残酷的机械工作。不得不说,懒惰真的可以使人进步。😂
由于本人对Unix的了解很局限,只会一些常用的命令,所以在动手之前先看了一遍这两篇教程:
首先了解UNIX的基础
文件管理
1.文件类型
普通文件
: 一个普通的文件是系统上包含数据、 文本或程序指令的文件。在本教程中,你将使用普通文件。
目录
: 目录存储特殊和普通文件。 UNIX 目录对于熟悉 Windows 或者 Mac OS 的用户,相当于文件夹。
特殊文件
: 一些特殊的文件提供访问硬件,例如硬盘、 CD - ROM 驱动器、 调制解调器和以太网适配器。其他特殊文件类似于别名或快捷方式,使您能够访问单个文件使用不同的名称。
2.常用命令
ls
:为了列出存储在当前目录中的文件和目录。ls -l
:获得有关列出的文件的详细信息。ls -a
:列出不可见文件。vi filename
:有这个文件就编辑,没有则新建 (filename表示文件名)。cat filename
:查看文件的内容。wc filename
:获取一个文件中的总的行数,字数和字符数。cp filename copyfile
:复制文件 你会发现多了一个文件 copyfile 在您的当前目录。此文件与原始文件 filename 完全相同。mv filename newfile
:重命名 将现有文件完全移动到新的文件。所以在这种情况下你只能发现 newfile 在你当前的目录中。rm filename
:删除现有文件
文件权限
1.权限表示符
当使用 ls -l 命令的时候,会将与文件相关的各种权限展示出来,如下:
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
输出的第一列表示的是与文件或者目录相关的访问模式或者权限。
权限被分为三组,组中的每个位置代表一个特定的权限,这个顺序是:读(r)
、写(w)
和执行(x)
:
前三个字符 (2-4) 表示文件的所有者的权限。例如 -rwxr-xr– 代表,文件的所有者拥有读 (r)、写 (w) 和执行 (x) 的权限。
第二组的三个字符 (5-7) 包含了该文件所属组的权限。例如 -rwxr-xr– 表示了所属组拥有读 (r) 和执行 (x) 的权限,但没有写权限。
最后一组三个字符 (8-10) 代表其他人的权限。例如 -rwxr-xr– 代表其他人只有读 (r) 的权限。
2.改变权限
改变文件或目录的权限,可以使用 chmod(change mode)命令。有两种方法可以使用 chmod:符号模式和绝对模式。
- 符号模式
对于初学者来说使用符号模式是最简单的来修改文件或目录的权限方法。可以用下表中的符号来添加、删除或指定你想要设置的权限。
Chmod 操作符 | 描述 |
---|---|
+ | 给文件或者目录添加指定的权限。 |
- | 删除文件或者目录的权限。 |
= | 设置指定的权限。 |
- 绝对权限
用chmod命令修改权限的第二种方法,是使用一个数字来指定文件的一些列权限。
每个权限被分配了一个数值,如下表所示, 并且给每个权限集的总和提供了一个数值。
数值 | 权限八进制表示 | 参照 |
---|---|---|
0 | 没有权限 | - - - |
1 | 可执行的权限 | - -x |
2 | 写权限 | -w- |
3 | 执行和写权限: 1 (执行) + 2 (写) = 3 | -wx |
4 | 读取权限 | r- - |
5 | 读取和执行权限: 4 (读取) + 1 (执行) = 5 | r-x |
6 | 读取和写权限: 4 (读) + 2 (写) = 6 | rw- |
7 | 所有权限: 4 (读) + 2 (写) + 1 (执行) = 7 | rwx |
变量
变量类型
局部变量:该类型变量只会在当前 Shell 实例内有效。他们无法适用于由 Shell 启动的程序。他们仅在命令提示符处进行设置。
环境变量:环境变量对 Shell 的任何子进程都有效。部分程序是需要正确的调用函数才需要环境变量。通常,Shell 脚本只会定义程序运行需要的环境变量。
Shell 变量:该类型变量是由 Shell 设置的专用变量,是用来正确调用函数用的。有时这些变量是环境变量,有时是局部变量。
1.定义变量:
variable_name=variable_value
2.访问变量
#!/bin/sh
NAME="Zara Ali"
echo $NAME
3.删除变量
unset variable_name
数组
定义数组
NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"
array_name=(value1 ... valuen)
访问数组
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
可以使用以下方法之一,来访问数组中的所有项目:
${array_name[*]}
${array_name[@]}
循环
循环是一个强大的编程工具,可以使您能够重复执行一系列命令。针对 Shell 程序员,有 4 种循环类型:
while 循环
for 循环
until 循环
select 循环
#!/bin/sh
a=0
while [ "$a" -lt 10 ]# this is loop1
do
b="$a"
while [ "$b" -ge 0 ] # this is loop2
do
echo -n "$b "
b=`expr $b - 1`
done
echo
a=`expr $a + 1`
done
#!/bin/sh
for i in A B C D; do
echo $i
done
最后终于在折腾了这么长时间之后写下了我的第一次脚本