shell编程笔记1,shell编程笔记


参考文章:1 http://blog.csdn.net/wuwenxiang91322/article/details/9259877   通过chmod改变文件权限

补充知识

Linux文件的三种身份和四种权限,三种身份分别为:

  对于每个身份,又有四种权限,分别为:

 Linux中有两种表示文件权限的方式,分别为数字以及符号表示方式。

3 chmod以数字形式改变文件权限 :chmod 755 test.sh (解释:读 写 执行 权值依次是:4 2 1 而755依次代表用户 用户组 其他用户对应的权   限,将755换算成 字符形式,为rwxr-xr-x,也就是说文件的拥有者、所属群组 以及其他用户都可以读取与运行test.sh这个文件,但是只有拥有者自己可以写入这个文   件,也就是其他人无权修改test.sh这个文件。(当然 root用户无此限制,想改谁就该谁,这也是一个体现root账号至高无上权力的体验

 chmod以字符形式改变文件权限 :

chmod u+x test.sh  只给拥有者加上可执行权限

chmod g+x test.sh  只给群组身份加上可执行权限

chmod o+x test.sh  只给其他人身份加上可执行权限

 

chmod a+x test.sh  给所有人都赋予x权限

chmod o-x test.sh  如果要去掉某个身份的某个权限,只需要将+变为-即可,例如去除其他人身份的可执行权限:

shell 脚本的编写流程如下:

 

编写shell的习惯:一般情况下,最后在文件打开始写上注释.第一,因为shell有多个版本,在不同的linux操作系统下,shell是不 同的.比如,在ubuntu下是bash,所以首先表明编写的是什么shell脚本,如果不知道,在终端中输入echo $SHELL查看shell版 本.第二,写上本shell脚本的注释说明,即函数的目的,参数的意义.这其实和编写其他编程语言是一样的,便于别人了解自己所写脚本打含义.

正文: 

一 变量

shell 语言中可以使用变量,不过这里的变量不同于其他的高级语言中的变量。shell 脚本中的变量在使用时并不需要提前定义,也就是说每一个变量都可以在程序员需要时就使用。因为大部分 Linux 命令使用的是小写字母,而大多数的 shell 中的环境变量是使用大些字母表示的。因此,在 shell 脚本中出现的用户自定义变量最好使用小写字母,这样可以很好地区别 shell 中的环境变量。可以在终端中输入 set查看全部系统定义变量.使用 unset 命令可以删除变量的赋值,使变量的值为空。如果用户需要清除一个变量的值可以这样做,其等效于将这个变量赋值为空。shell中脚本变量对大叫写敏感的,这与linux以及很多高级编程语言一样的.注释使用"#"

 

 

二 退 出 状 态

exit 命令用于结束一个 shell 脚本的运行,就像 C 语言中的调用“exit(0)”,或者在main 函数中“return 0;”一样。shell 脚本在结束运行时也返回一个值,并且这个值会传递给调用脚本的父进程。这个父进程通常就是 shell,但是有些时候一些其他的用户程序也会调用 shell 脚本。父进程接收到这个值(其实这个值作为子进程结束状态的一部分)后,做下一步的处理.每个 shell 命令在结束执行时都会返回一个退出状态码。成功执行了该命令则返回 0;否则,不成功的命令将返回一个非零值。非零值通常都被解释成一个错误码,从惯例的角度来讲返回 0 代表正常。如果返回一个非零值,则表示进程出现了异常。这时候需要根据退出状态码找到进程退出的原因。通常来讲程序员和系统管理员之间应当约定一个退出状态码的协议,这样便于系统管理员帮助程序员发现错误。注意:退出状态码必须是十进制数,范围必须是 0 至 255。当脚本以不带参数的 exit 命令来结束时,脚本的退出状态码就由脚本中最后执行的命令来决定。也就是 exit 之前的命令。下面实例演示了 shell 脚本的退出状态码的使用,该脚本调用一个用户编写的简单程序。读者可以对比使用 exit 命令退出和不使用该命令退出的两个版本的 shell 脚本的区别。

三 条 件 测 试


 

1 条件测试命令一般有两种格式。1 test condition 2 [ condition ] 注意:使用“[ ]”时,要在条件和“[ ]”之间加上空格。
测试文件状态的条件表达式很多,但是最常用几个如下所示。
-d 文件是否为目录;
-s 文件是否长度大于 0;
-f 文件是否是普通文件;
-L 文件是否是符号链接;
-u 文件是否设置了 suid 位;
-r 文件是否可读;
-w 文件是否可写;
-x 文件是否可执行。
当条件测试的返回状态是 0 时,则表示测试成功,否则失败。下面实例测试 test.txt 文件是否可读、可写和可执行的。该脚本中使用两种条件测试的方法,读者可以对照理解。
(1)在 vi 编辑器中编辑该脚本如下:
#!/bin/sh
# file.sh 测试 test.txt 文件是否可读可写可执行
#测试 test.txt 文件的读权限,使用“[ ]”的方法
[ -r test.txt ]
echo $?
#测试 test.txt 文件的写权限,使用“[ ]”的方法
[ -w test.txt ]
echo $?
#测试 test.txt 文件的执行权限,使用“[ ]”的方法
[ -x test.txt ]
echo $?
#测试 test.txt 文件的读权限,使用“test 命令”的方法
test -r test.txt
echo $?
#测试 test.txt 文件的写权限,使用“test 命令”的方法
test -w test.txt
echo $?
#测试 test.txt 文件的执行权限,使用“test 命令”的方法
test -x test.txt
echo $?
exit 0
(2)
编写好脚本后,
增加 shell 脚本文件的可执行权限。
可以使用 chmod 命令增加 file.sh
文件的可执行权限。
$ chmod u+x file.sh
(3)使用 ls 命令查看 test.txt 的权限信息。
$ls –l test.txt
-rw-r--r--
1
root
0
Feb
7
04:50
test.txt
(4)在 shell 中运行该 shell 脚本如下:
0
0
1
0
0
1
运行结果说明 test.txt 文件只有可读写的权限,但是没有可执行的权限。

下面实例测试,传入脚本的文件名的文件是否是普通文件、目录文件和符号链接。该脚本使用位置变量作为文件名进行测试。
(1)在 vi 编辑器中编辑该脚本如下:
#!/bin/sh
# test.sh 测试文件的种类
#第一个文件是一个普通文件
[ -f $1]
echo $?
#第二个文件是一个目录文件
[ -d $2]
echo $?
#第二个文件是一个符号链接
[ -l $3]
echo $?
#运行的 shell 脚本本身也是一个普通文件
[ -f $0]
echo $?
exit 0
(2)
编写好脚本后,
增加 shell 脚本文件的可执行权限。
可以使用 chmod 命令增加 test.sh
文件的可执行权限。
$ chmod u+x test.sh
(3)使用 mkdir 命令创建一个目录 dir。
$mkdir dir
(4)使用 symlink 命令创建一个符号链接。
$symlink link test.txt
(5)在 shell 中运行该 shell 脚本如下:
$./test.sh test.txt dir link
0
0
0
0
试验结果说明每一步的测试都是成功的,每个文件的类型都和预期的一样。

测试时使用逻辑操作符
与 C 语言类似,shell 脚本中同样提供三种逻辑操作完成此功能。逻辑运算符通常和分
支语句配合使用,实现程序执行流程的不同。

-a 逻辑与,两个操作数均为真,结果为真,否则为假。
-o 逻辑或,两个操作数一个为真,结果为真,否则为假。
! 逻辑非,条件为假,结果为真,否则为假。


相关内容