shell编程笔记1

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

补充知识

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

  1. u:文件的拥有者
  2. g:文件所属的群组
  3. o:其他用户

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

  1. r:读取文件的权限(read)
  2. w:写入文件的权限(write)
  3. x:执行的权限(execute)
  4. s:特殊权限

 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 脚本的编写流程如下:

    1. 在编辑器中编辑 shell 脚本文件。
    2. 将该文件保存为“*.sh”文件。
    3. 增加脚本文件的可执行权限。  如:sudo chmod a+x test.sh(因为一般用户没有shell的执行权限)
    4. 使用相对路径名执行脚本文件。

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

正文: 

一 变量

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

  1. 声明变量:如name="xiao ming"
  2. 使用变量:如:echo $name            #echo 表示输出,$表示取name 的值.
  3. 表达式求值:  方式1 应该使用 expr 命令 expr 命令中可以使用数学运算符。例如,数字比较操作、整数运算操作或者逻辑操作等。方式2 在 shell 脚本中也可以使用双括号代替 expr 命令计算表达式的值。其形式如下:$((表达式)) 如:  expr 3+2 与$((3+2))是一样的
  4. shell 脚本中的变量很特别,因为在这里变量并不区分类型。这一点与 C 语言以及其他的一些编程语言完全不同,也容易使初学者感到困惑。本质上,shell 脚本中的变量都是字符串,在对变量的解释上则依赖于 shell 脚本中的变量定义.
  5. 位置变量:在运行一个 shell 脚本时可以向脚本传递命令行参数,这些命令行参数可以在 shell 脚本内部被引用到。根据每一个命令参数的位置,在 shell 中可以使用$1 至$9 来表示。$0 表示当前执行进程的文件名,也就是程序的执行文件名。

二 退 出 状 态

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 逻辑或,两个操作数一个为真,结果为真,否则为假。
! 逻辑非,条件为假,结果为真,否则为假。

时间: 2024-10-17 01:58:47

shell编程笔记1的相关文章

ubuntu shell编程笔记

and 命令 if  [   A  -a   B ] then else fi set command set  these are parameters $1 set strings str="A is a" echo "$str" a=30 b=15echo `expr a + b`echo `expr a - b`echo `expr a \* b`echo `expr a / b`echo `expr a % b` The Internal Field Se

shell编程笔记(1)

shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言    强类型(变量)    事先转换成可执行格式    C.C++.JAVA.C#            动态语言:解释型语言, on the fly    弱类型    边解释边执行    PHP.SHELL.python.perl 面向过程:Shell, C面向对象: JAVA, Python, perl, C++ 变量:内存空间,命名 内存:编址的存储单元 进程:1+100:1+10000001

shell编程笔记一

shell编程: bash变量类型: 环境变量 本地变量(局部变量) 位置变量 特殊变量(内置) 本地变量: varname=value:作用域为整个bash进程可以使用: 变量命名规范: 1. 只能含字母.数字和下划线,并且以字母和下划线开头 2. 最好不要跟系统已有的环境变量重名 3. 见名知意 局部变量: local varname=value:作用域为当前代码段: 环境变量:作用域为当前shell进程及其子进程,不能影响到其父进程: export varname=value "导出&qu

linux 基础与shell编程[笔记]

linux 基础与shell编程 linux 系统知识 linux是一个OS ,也是一个完全免费 开源 自由软件 linux 1991   荷兰大学生课程设计   unix GPL协议 GPL:General Public License 是一份GNU(完全自由软件操作系统)是一个广泛使用的自由软件许可证条款 常见的linux发行版本: Debian:Debian为一款提供您安装在计算机上使用的操作系统 (OS).操作系统就是能让您的计算机工作 的一系列基本程序和实用工具.由于 Debian 采

shell编程笔记(基本部分)

1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod +x first 使其可执行,最后输入 ./文件名 执行该脚本. #!/bin/bash # 对变量赋值: a="hello world" #等号两边均不能有空格存在 # 打印变量a的值: echo "A is:" $a 如果变量与字符串混合,则按此方法 num=2 e

Linux Shell编程笔记一:相关命令

相关出处请查看:http://www.cnblogs.com/stephen-liu74/archive/2011/11/01/2202027.html 零.shell中的内部变量: 1.    $?:    表示shell命令的返回值.2.    $$:    表示当前shell的pid.3.    $!:    最后一个放入后台作业的PID值.4.    $0:    表示脚本的名字.5.    $1--$9,${10}: 表示脚本的第一到九个参数,和第十个参数.6.    $#:    表

shell 编程笔记

#! /bin/sh 寻找shell解释器 /bin/sh  是一个路径 #! /usr/bin/python 仅仅是寻找一个python的解释器 执行linux程序的方法: 使得文件具有可执行的权限 直接执行 调用解释器来运行 使用source来运行 shell 存在着内部命令 和外部命令 内建命令就是shell 程序本身的命令 运行内部命令的时候 不包含进程的创建和消亡 可是在运行外部命令的时候,存在着进程是创建和消亡.以此同一时候 外部命令运行的步骤例如以下:. 创建一个子进程 查找路径

shell编程----笔记

考虑了下,只是自己的一点记录,就按照自己的情况进行记录吧,后续有新的东西再随时补充.嗯呢~~ 一.入门常识 1.  几个命令 1) !n:可执行history中的第n个命令 2) set:查看全部的环境变量 3) env:可查看当前的环境变量 4) unset (环境变量) (注意:如果是在父进程定义的环境变量,那么在子进程中该变量就不能被删除 5) alias :别名,简单设置你的命令,下面利用alias实现一个简单的HTTP服务 效果类似: 注:如果需要设置重启依旧生效的话可以将alias写

Shell编程笔记

#!/bin/bashecho "Hello World !" 1.作为可执行程序 将上面的代码保存为 test.sh,并 cd 到相应目录: chmod u+x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 2.作为解释器参数 这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如: /bin/sh test.sh /bin/php test.php 使用变量 your_name="qinjx" echo $your_