shell编程学习笔记一

来源:互联网 发布:网络表情图片大全 编辑:程序博客网 时间:2024/04/30 06:29
linux角本编程


文件的安全与权限
 
[root@localhost ~]# ls -l
总计 48 #所有文件所占空间
             
-rw------- 1 root root   913 12-26 13:50 anaconda-ks.cfg
-rw-r--r-- 1 root root 26586 12-26 13:50 install.log
-rw-r--r-- 1 root root  3488 12-26 13:47 install.log.sysl


    -         rw-            ---            ---          该文件的权限位
文件类型   文件属主权限  同组用户权限   其他用户权限


root 文件的属主
root 属主所在缺省组
913  文件长度
12-26 13:50 更新时间
anaconda-ks.cfg 文件名


文件类型
d       目录
l       符号链接
s       套接字文件
b       块设备文件
c       字符设备文件
p       普通管道文件
-       普通文件




权限
创建一个文件
[root@localhost tmp]# touch myfile
[root@localhost tmp]# ls -l
总计 12
-rw-r--r-- 1 root root  0 12-31 03:51 myfile
-rw-r--r-- 1 root root 56 12-30 20:32 tt.t26 


r 读权限
w 写权限
x 执行角本或程序的权限


用户创建文件时,系统不会设置执行权限位
对文件属主来说,在只有读权限位被置空的情况下,仍然可以通过文件重定向写入文件


改变权限位


符号模式
chmod 命令格式
chmod [who] operator [permission] filename


who
   u 文件属主权限
   g 同组用户权限
   o 其他用户权限
   a 所有用户
operator
   + 添加权限
   - 取消权限
   = 设置权限
permission
   r 读
   w 写
   x 执行
   s 文件属主和组set-ID
   t 粘性位*
   l 文件加锁,其他用户不能访问
 
示例代码:
添加执行权限,取消其他用户的写权限
[retacn@localhost tmp]$ chmod u+x o-w myfile
[retacn@localhost tmp]$ ls -l
总计 4
-rwxrw-r-- 1 retacn retacn 0 12-31 04:08 myfile


绝对模式
chmod [mode] filename
mode 是一个八进制数


r 4
w 2
x 1




目录
r 列出该目录中的文件
w 可以在该目录中创建或删除文件
x 可以搜索或进入该录


目录文件会覆盖目录中文件的权限






chown
修改文件的所有权
chown -R -h owner filename
-R 所有子目录下的文件也进行相同有操作
-h 在改变符号链接文件的属主时不影响该链接指向的目标文件 


示列代码如下:


[root@localhost tmp]# ls -l
总计 4
-rwxrw-r-- 1 retacn retacn 0 12-31 04:08 myfile
[root@localhost tmp]# chown yue myfile
[root@localhost tmp]# ls -l
总计 4
-rwxrw-r-- 1 yue retacn 0 12-31 04:08 myfile 




chgrp
同上




?????????????????????????????
























常用的shell命令
函数                                        说明
echo "text"                             将内容打印到屏幕
ls                                      文件列表
wc -l file                              计算文件行数
wc -w file                              计算文件中的单词
wc -c file                              计算文件中的字符数
cp 源文件 目标文件                      复制文件
mv 源文件 目标文件                      移动或得命名
rm filename                             删除文件
grep "text" filename                    文件中搜索字符串
cat filename                            输出文件内容到标准输出设备
file filename                           获到文件类型
read var                                提示用户输入,并将输入赋值给变量
sort filename                           对文件中的行进行排序
uniq                                    删除文本文件中出现的行列
expr                                    进行数学运算 expr 1"+"1
find                                    搜索文件
tee                                     将数据输出到标准输出或文件
basename filename                       返回不含路径的文件名
dirname  filename                       返回文件所在路径
head filename                           打印文本文件开头几行
tail file                               打印文本文件末尾几行
sed                                     基本查打替换程序,可以从标准输入读取文本
                                        将结果输出到标准输出
awk                                     从文本文件中提取字符,默认分段分隔符为空格






角本编写
 第一行格式#!/bin/sh  通知shell使用bourne shell解释器
 第二行注释写入角本名
 角本必须具有可执行属性
 修改文件
 chmod +x filename




示例代码


#!/bin/sh
# 角本名
# 角本解释
echo "starting 角本名...wait"
 所执行命令
echo "finished 角本名"


增加角本执行权限
chmod u+x filename
运行角本
./filename


如果找不到命令


查看当前目录
pwd


编辑用户的.profile文件,添加
PATH=$PATH:$路径名
重新初始化.profile
../profile


条件测试


测试文件状态
test condition
 [condition]
 注:在使用[]时要在条件两边加上空格
0表示成功,其他表示件败




示例代码如下:
测试文件是否可写
[retacn@localhost tmp]$ ls -l
总计 4
-rw-rw-r-- 1 retacn retacn 0 12-31 05:05 myfile


[retacn@localhost tmp]$ [ -w myfile ]
[retacn@localhost tmp]$ echo $?
0
[retacn@localhost tmp]$ test -w myfile
[retacn@localhost tmp]$ echo $?
0


测试文件是否可执行
[retacn@localhost tmp]$ [ -x myfile ]
[retacn@localhost tmp]$ echo $?
1


测试是否存在tmp 目录
[retacn@localhost ~]$ [ -d tmp ]
[retacn@localhost ~]$ echo $?
0


常用文件操作符
-e 文件存在
-f 文件是一个普通文件
-s 文件大小为0
-d 文件是一个目录
-c 是一个字符
-p 是一个管道
-L 是一个符号链接
-S 是一个socket
-t 与一个终端设务相关
-r
-w
-x
-g 文件有sgid
-u 文件有suid的设置




测试时使用逻辑操作符
-a 逻辑与
-o 逻辑或


测试两个文件是否都可读
[retacn@localhost tmp]$ ls
myfile  myfile1
[retacn@localhost tmp]$ [ -r myfile -a -r myfile1 ]
[retacn@localhost tmp]$ echo $?
0




字符串测试
test "stirng"
test string_operator "string"
test "string" string_operator "string"
[ string_operator string ]
[ string string_operator string ]


string_operator可为:
=   两字符串相等
==  同上
!= 两字符中不相等
>   按ascii大小比较是否大于
<   同上
-z  字符串是否为null
-n  非空串
 
测试数值
"number"numeric_operator"number"
[ "number"numeric_operator"number"]


numeric_operator可为:
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于


expr用法
语法格式:
expr argument operator argument


手工命令行计数器
[retacn@localhost tmp]$ expr 1 + 1
2


注:使用乘号是要用\*




增量计数
示例代码:
LOOP=0
LOOP = `expr $LOOP + 1`


数值测试
如果是非整数返回错误
expr a+1