shell编程笔记1
参考文章:1 http://blog.csdn.net/wuwenxiang91322/article/details/9259877 通过chmod改变文件权限
补充知识:
1Linux文件的三种身份和四种权限,三种身份分别为:
- u:文件的拥有者
- g:文件所属的群组
- o:其他用户
对于每个身份,又有四种权限,分别为:
- r:读取文件的权限(read)
- w:写入文件的权限(write)
- x:执行的权限(execute)
- s:特殊权限
2 Linux中有两种表示文件权限的方式,分别为数字以及符号表示方式。
3 chmod以数字形式改变文件权限 :chmod 755 test.sh (解释:读 写 执行 权值依次是:4 2 1 而755依次代表用户 用户组 其他用户对应的权 限,将755换算成 字符形式,为rwxr-xr-x,也就是说文件的拥有者、所属群组 以及其他用户都可以读取与运行test.sh这个文件,但是只有拥有者自己可以写入这个文 件,也就是其他人无权修改test.sh这个文件。(当然 root用户无此限制,想改谁就该谁,这也是一个体现root账号至高无上权力的体验)
4 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 如果要去掉某个身份的某个权限,只需要将+变为-即可,例如去除其他人身份的可执行权限:
5 shell 脚本的编写流程如下:
- 在编辑器中编辑 shell 脚本文件。
- 将该文件保存为“*.sh”文件。
- 增加脚本文件的可执行权限。 如:sudo chmod a+x test.sh(因为一般用户没有shell的执行权限)
- 使用相对路径名执行脚本文件。
6编写shell的习惯:一般情况下,最后在文件打开始写上注释.第一,因为shell有多个版本,在不同的linux操作系统下,shell是不 同的.比如,在ubuntu下是bash,所以首先表明编写的是什么shell脚本,如果不知道,在终端中输入echo $SHELL查看shell版 本.第二,写上本shell脚本的注释说明,即函数的目的,参数的意义.这其实和编写其他编程语言是一样的,便于别人了解自己所写脚本打含义.
正文:
一 变量
shell 语言中可以使用变量,不过这里的变量不同于其他的高级语言中的变量。shell 脚本中的变量在使用时并不需要提前定义,也就是说每一个变量都可以在程序员需要时就使用。因为大部分 Linux 命令使用的是小写字母,而大多数的 shell 中的环境变量是使用大些字母表示的。因此,在 shell 脚本中出现的用户自定义变量最好使用小写字母,这样可以很好地区别 shell 中的环境变量。可以在终端中输入 set查看全部系统定义变量.使用 unset 命令可以删除变量的赋值,使变量的值为空。如果用户需要清除一个变量的值可以这样做,其等效于将这个变量赋值为空。shell中脚本变量对大叫写敏感的,这与linux以及很多高级编程语言一样的.注释使用"#"
- 声明变量:如name="xiao ming"
- 使用变量:如:echo $name #echo 表示输出,$表示取name 的值.
- 表达式求值: 方式1 应该使用 expr 命令 expr 命令中可以使用数学运算符。例如,数字比较操作、整数运算操作或者逻辑操作等。方式2 在 shell 脚本中也可以使用双括号代替 expr 命令计算表达式的值。其形式如下:$((表达式)) 如: expr 3+2 与$((3+2))是一样的
- shell 脚本中的变量很特别,因为在这里变量并不区分类型。这一点与 C 语言以及其他的一些编程语言完全不同,也容易使初学者感到困惑。本质上,shell 脚本中的变量都是字符串,在对变量的解释上则依赖于 shell 脚本中的变量定义.
- 位置变量:在运行一个 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 逻辑或,两个操作数一个为真,结果为真,否则为假。
! 逻辑非,条件为假,结果为真,否则为假。
shell编程笔记1的更多相关文章
- Shell编程笔记
Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理. 修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...
- shell编程笔记(1)
shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 C.C++.JAVA.C# ...
- linux系列之-—01 shell编程笔记
一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...
- shell编程笔记(基本部分)
1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod ...
- SHELL编程笔记(二)之shell流程控制
Shell控制流程结构 本章内容有: 退出状态 While.for和until loops循环 If then else语句 脚本中动作 菜单 条件控制语句 If then els ...
- shell 编程笔记
#! /bin/sh 寻找shell解释器 /bin/sh 是一个路径 #! /usr/bin/python 仅仅是寻找一个python的解释器 执行linux程序的方法: 使得文件具有可执行的权限 ...
- 小苏的Shell编程笔记之六--Shell中的函数
http://xiaosu.blog.51cto.com/2914416/531247 Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以 ...
- ubuntu shell编程笔记
and 命令 if [ A -a B ] then else fi while [ ] do done set command set these are parameters $1 s ...
- linux shell 编程笔记
重定向和管道 输出重定向:把在终端输出的内容保存到文件上 输入重定向:通过文件的格式输入内容到终端 管道:把上一条命令的输出作为下一条命令的输入,如同管道一样,所有命令同时进行,同时处理数据,不 ...
随机推荐
- [转]C# 位域[flags]
.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: [Flags] enu ...
- 多线程与MySQL(十)
1.1 多线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合 ...
- Maintain Aspect Ratio Mixin
Maintain Aspect Ratio Mixin Maintain the aspect ratio of a div with CSS RESPONSIVE ASPECT RATIOS WIT ...
- 大数据量.csv文件导入SQLServer数据库
前几天拿到了一个400多M的.csv文件,在电脑上打开要好长时间,打开后里面的数据都是乱码.因此,做了一个先转码再导入数据库的程序.100多万条的数据转码+导入在本地电脑上花了4分钟,感觉效率还可以. ...
- 5G商用时代来临!这些产业将发生变革
5G商用时代来临!这些产业将发生变革 值得注意的是,在获得工信部发放的5G网络试验频率后,三大运营商已在各大城市建设5G基站,开展5G外场测试.华为亦适时表示,已经在中国40多个城市与中国三大运营商开 ...
- JS怎样写闰年
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Pyhton学习——Day46
# 数据库:存储数据的仓库# 数据库更多的是安全.备份# 客户端取服务端的数据实际都是从服务端的内存中抓取数据# 数据库管理系统软件# 数据库管理系统(Database Management Syst ...
- Git的初始化设置
Git安装成功之后,新建一个初始化的仓库以及配置GitHub仓库 Git配置GitHub账户 安装完成之后要进行git的配置,这里配置的是GitHub账户 MisSa@DESKTOP-PIQ06QO ...
- Node_进阶_2
第二天 一.复习: Node.js开发服务器.数据.路由.本地关心效果,交互. Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 单线程.非阻塞I/O.事件驱动. 实 ...
- thinkphp queue
composer create-project topthink/think composer require topthink/think-queue php think queue:work -- ...