脚本语言通常是解释型的,这类程序的运行。是由解释器读入程序代码,并将其转换成内部的形式,

再执行,解释器本身是一般的编译型程序。

  第一行的开头处使用#!这两个字符,当内核扫描到改行的其余部分,看是否存在可以用来执行程序的
解释器的完整路径。

  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脚本学习指南笔记(一)的更多相关文章

  1. Shell脚本学习指南笔记

    Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...

  2. 【Shell脚本学习指南笔记】重定向文件描述符 2>&1

    如: make > results 2>&1 重定向 > results让文件描述符1(标准输出)作为文件results,接下来的重定向2>&1有两个部分.2& ...

  3. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  4. 笔记——shell脚本学习指南

    <shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...

  5. 转 shell脚本学习指南

    shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...

  6. 《Shell脚本学习指南》学习笔记之自定义函数

    Shell的函数在使用之前必须先定义,定义格式: [ function ] funname [()] { action; [return int;] } 可以带function fun()定义,也可以 ...

  7. 《Shell脚本学习指南》学习笔记之变量、判断和流程控制

    变量 定义变量 可以使用export和readonly来设置变量,export用于修改或打印环境变量,readonly则使得变量不得修改.语法: export name[=word] ... read ...

  8. 《shell脚本学习指南》学习笔记之入门

    为什么要使用shell脚本? shell脚本能够轻易处理文件与目录之类的对象,而且是各UNIX系统之间经过POSIX标准化的通用的功能,因此Shell脚本只要“用心写”一次,即可应用到很多系统上,因此 ...

  9. shell脚本学习积累笔记(第一篇)

    (1)首先,今天在执行shell脚本./test.sh时抛出“/bin/sh^M: bad interpreter: No such file or directory”的异常,百度后,才知道这是由于 ...

随机推荐

  1. Nginx反代MogileFS集群

    上一篇博文我们主要聊了下分布式文件系统MogileFS的组件以及部署使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13677279.html:今天我们主要 ...

  2. C#开发PACS医学影像处理系统(十九):Dicom影像放大镜

    在XAML代码设计器中,添加canvas画布与圆形几何对象,利用VisualBrush笔刷来复制画面内容到指定容器: <Canvas x:Name="CvsGlass" Wi ...

  3. hystrix文档翻译之开始使用

    获取包 使用maven获取包. <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId ...

  4. Sublime Text3 for Java 编译运行环境配置 入门详解 - 精简归纳

    Sublime Text3 for Java 编译运行环境配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 24 转载请注明出处!️ 目录 Sublime Text3 for ...

  5. ubuntu桌面版修改屏幕刷新率之后无法进入桌面(一直卡在输入密码的界面)的解决办法

    deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiversedeb-src https://mir ...

  6. PHP绕过disable_function

    PHP绕过disable_function 常规绕过 exec exec执行command命令,但是不会输出全部结果,而是返回结果的最后一行. 想得到全部的结果,可以使用第二个参数,让其输出到一个数组 ...

  7. spring给容器注册组件 的几种方式

    环境搭建: 新建一个maven项目,引入依赖 <dependency> <groupId>org.springframework</groupId> <art ...

  8. 部署项目到服务器 & 搭建博客网站

    搭建博客网站 作为名程序员,或者是网络编程爱好者,拥有一个自己的博客网站再好不过,本篇文章手把手教你部署自己的网站

  9. Java知识系统回顾整理01基础05控制流程08综合练习

    一.练习--黄金分割点 题目: 寻找某两个数相除,其结果 离黄金分割点 0.618最近 分母和分子不能同时为偶数 分母和分子 取值范围在[1,20] (即1到20) 要求效果: public clas ...

  10. C++ 异常处理 catch(...)介绍

    转载:https://blog.csdn.net/fcsfcsfcs/article/details/77717567 catch(-)能够捕获多种数据类型的异常对象,所以它提供给程序员一种对异常 对 ...