一、基础知识

1.shell脚本的格式注意事项 

  1. 第一行(一般必须写明):指定脚本使用的shell(若不写明也不影响脚本的执行,系统会自动以sh解析脚本)。"#!/bin/bash"声明文件内的语法使用bash的语法,当这个程序被执行时,加载bash的相关环境配置文件(一般是non-login shell中的~/.bashrc文件)。
  2. 第二部分的注释(可写):程序内容的说明。shell脚本中,井号#用作批注(除第一行的"#!"外),shell不会解释以#开头的行(除第一行bash声明外)。
  3. 主要环境变量的声明(可写)
  4. 脚本的程序部分。
  5. 程序执行结束,回传一个数值给系统告知执行的结果(可写。默认命令执行成功返回数值0)。
  6. shell脚本中,不能随意添加空格,否则出错:

    (1),=等号两边必须无空格。否则出错。如i =$1和i= $1都是错的。但是在()内部不限制如for ((i= 1;i < 3;i= i+1))是正确的。

    (2),(())内外部括号之间无空格,( () )这样报错。但内部括号内不限制,随便如s=$(( $i+1 ))可以

    (3),[]是条件判断式,所以前后内部都必须空格。其内部元素之间必须有空格才能识别,否则一律报错,如“while [ $i -lt 6 ]”少一个空格都报错。总之,[]所在行每个独立元素前后都必须有空格               (不是一起的就必须空格)。-gt,-lt,-ge,-le,-ne

          另外,单引号是字符串限定符,将内部内容作为字符串。而双引号和{}是变量限定符,内部作为变量处理

2.查看系统可用的shell(/etc/shells)

[root@linuxprobe ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

3.shell脚本执行方式

  执行shell脚本的三种方式

  #sh scripts.sh

  #/dir/scripts.sh   或者 ./scripts.sh      脚本得有执行权限。

  #source scripts.sh

二、变量

1.环境变量

  全局变量(环境变量):

  环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如path,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程
环境变量:系统在启动过程中预先指定好的一系列的变量.比如当前用户是谁 当前shell是什么 当前用户的家目录在什么位置等等。set 查看所有变量(包括环境变量和非环境变量)

在Linux中,内置了一些环境变量,如HOME,PATH,SHELL,UID,GID,HOSTNAME等,可以通过命令env显示所有的环境变量,echo $变量名 输出变量。

  每个用户家目录下的环境变量配置文件:
  .bash_history 保存用户执行过来历史命令,当用户退出时保存
  .bash_logout 保存用户退出时执行的命令
  .bash_profile 保存用户定义环境和启动项目,用户执行命令时的搜索路径
  .bashrc 保存用户别名和函数
  .bash_profile 登录级别环境配置文件
  .bashrc shell级别的环境配置文件
  /etc/bashrc 全局shell级别环境配置文件
  /etc/profile 全局登录级别环境配置文件
  登录时加载的配置文件顺序
  /etc/profile
  .bash_profile
  .bashrc
  /etc/bashrc

  局部变量(普通变量):

  环境变量一般在脚本或命令中进行定义,只在当前的shell中有效,其他启动的shell这个变量是无效的。

2.预定义变量

  预定义变量:系统预定义好的 和进程名称 进程编号 进程参数 进程返回值相关

  预定义变量$0 $$ $# $? $*
  $0 进程名(如:/etc/init.d/network)
  $$ 进程号(/var/run 模拟系统结束进程)
  $# 位置参数的数量
  $* 所有位置参数的内容
  $? 命令执行后的返回状态.0为执行正确,非0为执行错误

3.位置变量:和命令行参数相关

  位置变量: 和命令行参数相关 (命令后跟的参数$1-$9)

4.自定义变量(用户自己定义的变量)

  自定义变量:当用户变量不够用时,自定义的变量

算式运算符:

  +、-、*、/、()
  1.$((5+3))
  2.$[ 5+3 ]
  3.expr操作符:
  +、-、\*、/、%取余(取模)
  expr 1 + 2
  4.
  a=1;b=2
  let c=$a+$b
  echo $c

shell通配符

  因为 shell 频繁 地使用文件名,shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。

  通配符            意义

  *         匹配任意多个字符(包括零个或一个)
  ?         匹配任意一个字符(不包括零个)
  [characters]     匹配任意一个属于字符集中的字符
  [!characters]    匹配任意一个不是字符集中的字符
  [[:class:]]      匹配任意一个属于指定字符类中的字符

  

     字符类         意义

  [:alnum:]      匹配任意一个字母或数字
  [:alpha:]       匹配任意一个字母
  [:digit:]        匹配任意一个数字
  [:lower:]       匹配任意一个小写字母
  [:upper]       匹配任意一个大写字母

  一些常用的匹配:

  模式               匹配对象
  *               所有文件
  g*                文件名以“g”开头的文件
  b*.txt              以”b” 开头,中间有零个或任意多个字符,并以”.txt” 结尾的文件
  Data???                        以“Data”开头,其后紧接着 3 个字符的文件
  [abc]*                          文件名以”a”,”b”, 或”c” 开头的文件
  BACKUP.[0-9][0-9][0-9]      以”BACKUP.” 开头,并紧接着 3 个数字的文件
  [[:upper:]]*           以大写字母开头的文件
  [![:digit:]]*            不以数字开头的文件
  *[[:lower:]123]          文件名以小写字母结尾,或以“1”,“2”,或“3”结尾的文件         

shell元字符

  

字符 说明
IFS 由 <space> 或 <tab> 或 <enter> 三者之一组成(我们常用 space )。
CR 由 <enter> 产生。
= 设定变量。
$ 作变量或运算替换(请不要与 shell prompt 搞混了)。
> 重导向 stdout。 *
< 重导向 stdin。 *
| 命令管线。 *
& 重导向 file descriptor ,或将命令置于背境执行。 *
( ) 将其内的命令置于 nested subshell 执行,或用于运算或命令替换。 *
{ } 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。
; 在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 *
&& 在前一个命令结束时,若返回值为 true,继续执行下一个命令。 *
|| 在前一个命令结束时,若返回值为 false,继续执行下一个命令。 *
! 执行 history 列表中的命令。*

  加入”*” 都是作用在命令名直接。可以看到shell 元字符,基本是作用在命令上面,用作多命令分割(或者参数分割)。因此看到与通配符有相同的字符,但是实际上作用范围不同。所以不会出现           混淆。

shell转义符

  有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要用到转义符了。 shell提供转义符有三种。

字符 说明
‘’(单引号) 又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。
“”(双引号) 又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替
\(反斜杠)   又叫转义,去除其后紧跟的元字符或通配符的特殊意义。

shell脚本基础知识以及变量的更多相关文章

  1. shell脚本—基础知识,变量

    shell脚本本质: 编译型语言 解释型语言 shell编程基本过程 1.建立shell文件 2.赋予shell文件执行权限,使用chmod命令修改权限 3.执行shell文件 shell变量: sh ...

  2. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

  3. shell脚本基础知识

    虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距. 这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Lin ...

  4. shell 脚本基础知识详细介绍(二)

    SimonSu 博客 评论墙 读者墙 链接 关于 linux中的sh脚本语法 玩linux都知道sh脚本的方便,但如何编写sh脚本却是像我这样的新手和菜鸟的难题.能不能编写得出来是一回事,了不了解又是 ...

  5. Shell脚本基础知识详细介绍(一)

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...

  6. Linux运维之shell脚本基础知识

    1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...

  7. bash&nbsp;shell笔记1&nbsp;脚本基础知识

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...

  8. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  9. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

随机推荐

  1. 极验验证码破解之selenium

    这一篇写完很久了,因为识别率一直很低,没办法拿出来见大家,所以一直隐藏着,今天终于可以拿出来见见阳光了. 哈喽,大家好,我是星星在线,我又来了,今天给大家带来的是极验验证码的selenium破解之法, ...

  2. GIT 使用(一):安装和配置

    安装和配置 Table of Contents 1. 安装 2. 配置 1. 初次运行 Git 前的配置 小结 2. 用户信息 3. 别名 4. 查看已经存在的配置 3. 获取帮助 4. 参考与扩展阅 ...

  3. C++走向远洋——66(十五周阅读程序)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  4. C++走向远洋——29(长方柱类)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:长方柱类.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. python 字典元组集合字符串

    s1 = ''hello, world!'' s2 = '\n\hello, world!\\n' print(s1, s2, end='') s1 = '\141\142\143\x61\x62\x ...

  6. NSInteger打印以及字符串的转换

    You can also use %zd (NSInteger) and %tu (NSUInteger) when logging to the console. NSInteger integer ...

  7. JAVA生成EXCEL模板

    JAVA生成excel模板,支持1.必填字段前加 红色 * 2.定义可选值下拉列表 valList3.定义名称并通过名称设置可选值 refName(名称在sheet2,sheet2自动隐藏)4.支持设 ...

  8. Mac OS X 10.13上 安装odoo 11.0开发环境

    0.准备假设homebrew已经安装好没安装的需要先安装,见下面链接http://brew.sh/ 1.安装PostgreSQL$ brew tap homebrew/services$ brew i ...

  9. Linux与unix shell编程指南

    第14章 环境和shell变量 1.使用变量时,尽量用花括号将之括起来,防止shell误解变量值. 2.设置变量时的不同模式 variable-name=value 设置实际值到variable-na ...

  10. 小程序中内容审核功能的使用(后台使用thinkPHP5.1)

    本文包含文本和图片的检测 //接收要检测的文本内容并调用检测方法 public function textCheck(Request $request){ //内容安全识别 $data['conten ...