Shell脚本学习指南笔记(一)
脚本语言通常是解释型的,这类程序的运行。是由解释器读入程序代码,并将其转换成内部的形式,
再执行,解释器本身是一般的编译型程序。
第一行的开头处使用#!这两个字符,当内核扫描到改行的其余部分,看是否存在可以用来执行程序的
解释器的完整路径。
Shell命令与参数
分号(;)可用来分隔同一行的多条命令,Shell会依次执行;
使用&,则表示Shell将在后台执行其前面的命令,Shell不用等到该命令执行完,就可以继续下一条命令的执行;
Shell变量
1.名称开头是一个字母或下划线开头符号,后面可以接字母数字,或下划线符号;
2.赋值方式的方式为:变量名=值(注意等号前后不能有任何空格,变量值之间有空格时,需要用引号括起来),单行多次赋值,之间用空格分隔
3.使用变量:$变量名
first=isaac middle=bashevis last=singer #单行可以多次赋值
fullname="isaac bashevis singer" #值中包含空格时使用引号
oldname=$fullname #此处不需要引号
访问Shell脚本的参数
位置参数指的是Shell脚本的命令行参数;在Shell函数里,它们同时也可以是函数的参数,各个参数都由整数来命名,$n;当n>9,使用参数时要用大括号括起来,${n};
补充:几个特殊字符用来处理参数
| 参数说明 | 说明 |
| $# | 传递到脚本的参数个数 |
| $* | 以一个单字符串显示所有向脚本传递的参数 |
| $$ | 脚本运行的当前进程ID号 |
| $! | 后台运行的最后一个进程的ID号 |
| $@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数 |
| $- | 显示Shell使用的当前选项,与set命令功能相同 |
| $? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误 |
$* 与 $@ 区别:
- 相同点:都是引用所有参数
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)
Shell数组
- Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小
- Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 ... valuen)
- Shell读取数组的格式:
${array_name[index]} #单个元素
${array_name[*]} #所有元素
${array_name[#]} #所有元素
Shell脚本执行跟踪
在脚本里,用 set -x 命令将执行跟踪的功能打开,然后再用 set +x 命令关闭跟踪功能;
基本的I/O重定向
以<改变标准输入
program < file 可将program的标准输入修改为file;
tr -d '\r' < file.txt
以>改变标准输入
program > file 可将program的标准输出修改为file;> 重定向符在目的文件不存在时,会新建一个,然而,如果目的文件已存在,
它就会被覆盖掉,原本的数据就会丢失;
tr -d '\r' < file.txt > file.log
以>>附加到文件
program >> file 可将program的标准输出附加到file的结尾处;>> 重定向符在目的文件不存在时,会新建一个,然而,如果目的文件已存在,
它不会被覆盖掉,而是将程序所产生的数据附加到文件结尾处;
以 | 建立管道
program1 | program2 可将program1的标准输出修改为program2的标准输入;
特殊文件:/dev/null与、/dev/tty
/dev/null为空洞文件,传送到这的数据都会被系统丢掉,当数据写入到这个文件时,程序会认为它已成功完成写入操作,其实什么事情都没有发生过;相反的,如果读取这个文件则会立即返回EOF;
/dev/tty被打开时,系统会自动将其重定向到一个终端;
以下为网络摘抄
profile,bashrc,bash_profile区别
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc /profile中的变量,他们是”父子”关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
Shell脚本学习指南笔记(一)的更多相关文章
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- 【Shell脚本学习指南笔记】重定向文件描述符 2>&1
如: make > results 2>&1 重定向 > results让文件描述符1(标准输出)作为文件results,接下来的重定向2>&1有两个部分.2& ...
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- 笔记——shell脚本学习指南
<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- 《Shell脚本学习指南》学习笔记之自定义函数
Shell的函数在使用之前必须先定义,定义格式: [ function ] funname [()] { action; [return int;] } 可以带function fun()定义,也可以 ...
- 《Shell脚本学习指南》学习笔记之变量、判断和流程控制
变量 定义变量 可以使用export和readonly来设置变量,export用于修改或打印环境变量,readonly则使得变量不得修改.语法: export name[=word] ... read ...
- 《shell脚本学习指南》学习笔记之入门
为什么要使用shell脚本? shell脚本能够轻易处理文件与目录之类的对象,而且是各UNIX系统之间经过POSIX标准化的通用的功能,因此Shell脚本只要“用心写”一次,即可应用到很多系统上,因此 ...
- shell脚本学习积累笔记(第一篇)
(1)首先,今天在执行shell脚本./test.sh时抛出“/bin/sh^M: bad interpreter: No such file or directory”的异常,百度后,才知道这是由于 ...
随机推荐
- elasticsearch备份和还原(基于hdfs)
备份和还原,为什么elasticsearch还需要备份呢,明明可以设置副本做到高可用,那怕啥呢? 其实在实际的生产环境中,一般最终的结果数据都是要备份的,这样的做的目的,就是能够以最快的速度还原数据, ...
- Docker数据卷和数据卷容器
是什么 数据卷设计的目的,在于数据的永久化,他完全独立于容器的生存周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制对容器引用的数据卷进行处理.类似我们Redis ...
- 面试官:一个 TCP 连接可以发多少个 HTTP 请求?
曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式 ...
- Spring Boot学习(一)初识Spring Boot
Spring Boot 概述 Spring Boot 是所有基于 Spring 开发的项目的起点.Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置 ...
- document对象-操作元素的文档结构
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...
- python协程(yield、asyncio标准库、gevent第三方)、异步的实现
引言 同步:不同程序单元为了完成某个任务,在执行过程中需靠某种通信方式以协调一致,称这些程序单元是同步执行的. 例如购物系统中更新商品库存,需要用"行锁"作为通信信号,让不同的更新 ...
- UOS服务器常见问题
UOS服务器安装完成之后,xshell工具无法远程, 描述 我安装完系统后,用xshell工具无法远程,必须在系统上才能进去我是通过centos7的kvm虚拟工具上刷的统信的系统,安装方式: 最小化安 ...
- 【Processing-日常1】小圆碰撞
之前在CSDN上发表过: https://blog.csdn.net/fddxsyf123/article/details/79741637
- (转)ServletConfig与ServletContext
出处:http://blog.csdn.net/cl05300629/article/details/9362601 作者:伫望碧落 一.Servlet配置对象(ServletConfig):Serv ...
- 靠这些秋招秘笈,齐姐的学妹今年已经拿到了 8 个offer!
小齐说: 现在秋招进行时,正在找工作的小伙伴进度都怎么样了呀? 今天这篇文章是我武大的学妹今年秋招的经验分享,庆妹去年才决定转行,现在已手握 N+ 个 offer - 这篇文章干货满满,庆妹对每一块面 ...