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 编程笔记
重定向和管道 输出重定向:把在终端输出的内容保存到文件上 输入重定向:通过文件的格式输入内容到终端 管道:把上一条命令的输出作为下一条命令的输入,如同管道一样,所有命令同时进行,同时处理数据,不 ...
随机推荐
- Selenium键盘鼠标操作总结
鼠标操作 org.openqa.selenium.interactions.Actions 1.给元素设置焦点. 有时对于a标签等,为了不跳转到别的链接,但是需要设置焦点时就可使用. action.m ...
- Swagger中添加Token验证
1.该连接链接到api中基本的swagge功能:http://www.cnblogs.com/hhhh2010/p/5234016.html 2.在swagger中使用验证(这里使用密码验证模式)ht ...
- VSCode新建vue文件自定义模板
在一个Vue的项目中,反复的新建.vue文件是一个必不可少的工序.本着科技让人偷懒的原则,我们可以利用VSCode的snippet在.vue文件创建后能轻松地生成一套模板. 整个过程是轻松加愉快的,只 ...
- DirectUI界面编程(零)简介
有过Win32.MFC编程经验的朋友应该都知道,传统Windows应用中的按钮.编辑框等控件都是一个子窗口,操作系统通过窗口句柄来唯一标识该窗口. 使用Windows 标准控件创建用户界面,美化起来是 ...
- JAVA在线观看视频教程完整版
今天给大家介绍一下JAVA在线观看视频教程完整版,我们知道Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语 ...
- iOS9 & Xcode7 下设置LaunchImage启动图片 问题及解决
最近在学习iOS开发,碰到一个设置启动图片的问题,怎么也搞不定,综合网上种种资料后Done,现在把完整过程写一下. 这里以建立一个空的Single View Application 为演示基础. 1. ...
- day01 编程概述及计算机组成原理
目录 编程概述 计算机硬件的五大组成部分 Central Processing Unit(cpu中央处理器) 存储器 输入,输出设备 打开QQ的流程 计算机五大组成部分补充 多核CPU ×64/x86 ...
- Redis数据库入门基础,及优缺点介绍
简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis 是一个高性能的key-value数据库.R ...
- WePy--记录使用过程中的一些坑
讲真, 官方文档还是要好好看, 都是细节啊... 1- 使用wepy框架中封装好的小程序api <wepy 对小程序的API进行Promise处理> ①: 首先需要声明 开启使用we ...
- CSS布局总结(二)
前言:今天实训课依旧很水,继续总结,今天主要补了一下布局的知识.响应式的作业还没做完... 一.两列布局 html部分 <div class="parent"> < ...