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

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

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

  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. Linux实战(10):ssh密码被拒绝

    网上的操作都试过了,可还是不行,最终通过重装ssh服务解决. 参考资料:https://blog.csdn.net/VicdorLin/article/details/90727826 https:/ ...

  2. Linux实战(6):Centos8上传镜像

    小记 做以下操作之前得准备一个Docker Hub 的账号,然后创建仓库可私有也可公有这得看你自己了,仓库的名称需记住等等会有用. 安装podman podman跟docker使用的命令非常的接近,但 ...

  3. TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要

    在学C/C++  Java等强类型语言时,变量类型是唯一的,需要先指定.PHP JavaScript等弱类型语言时,无需指定变量类型 但是,TypeScript里面的联合类型 (Union Type) ...

  4. 如何在项目中使用composer的相关功能

    最近要在公司的magento项目中引用第三方库,用了composer来进行管理,composer还是非常方便的: 1.在应用的根目录下添加文件:composer.json {    "nam ...

  5. centos7 yum安装redis及常用命令

    redis是什么 Redis是一种基于内存的数据结构存储,可持久化的日志型.Key-Value数据库.使用关系型数据库的站点达到一定并发量的时候,往往在磁盘IO上会有瓶颈,这时候配合redis就有一定 ...

  6. Hive使用Calcite CBO优化流程及SQL优化实战

    目录 Hive SQL执行流程 Hive debug简单介绍 Hive SQL执行流程 Hive 使用Calcite优化 Hive Calcite优化流程 Hive Calcite使用细则 Hive向 ...

  7. 关于浏览器访问iLO报错ERR_SSL_BAD_RECORD_MAC_ALERT

    公司有几台HP DL380 G7服务器,ilo版本是ilo3(Integrated Lights-Out 3),ilo口配置好后,无法正常打开ilo页面 ping ilo口是通的,并且telnet 8 ...

  8. JS实现简单的多选选项的全选反选按钮

    1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <!-- 5 需求: 6 1.写三个按钮: ...

  9. DC4靶机

    DC-4靶机渗透 扫描内网机器,看到143是开启的,那么ok了,确定了目标主机的地址. 对其进行进一步的端口扫描,80,22端口都是开放的. 访问具体网页,进行爆破,分别为admin,happy. 里 ...

  10. PHP_Code_Challenge 1~30

    1. 1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= <?php error_reporting(0); require __DIR__ ...