shell脚本基础知识以及变量
一、基础知识
1.shell脚本的格式注意事项
- 第一行(一般必须写明):指定脚本使用的shell(若不写明也不影响脚本的执行,系统会自动以sh解析脚本)。"#!/bin/bash"声明文件内的语法使用bash的语法,当这个程序被执行时,加载bash的相关环境配置文件(一般是non-login shell中的~/.bashrc文件)。
 - 第二部分的注释(可写):程序内容的说明。shell脚本中,井号#用作批注(除第一行的"#!"外),shell不会解释以#开头的行(除第一行bash声明外)。
 - 主要环境变量的声明(可写)
 - 脚本的程序部分。
 - 程序执行结束,回传一个数值给系统告知执行的结果(可写。默认命令执行成功返回数值0)。
 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脚本基础知识以及变量的更多相关文章
- shell脚本—基础知识,变量
		
shell脚本本质: 编译型语言 解释型语言 shell编程基本过程 1.建立shell文件 2.赋予shell文件执行权限,使用chmod命令修改权限 3.执行shell文件 shell变量: sh ...
 - 什么是Shell?Shell脚本基础知识详细介绍
		
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
 - shell脚本基础知识
		
虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距. 这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Lin ...
 - shell 脚本基础知识详细介绍(二)
		
SimonSu 博客 评论墙 读者墙 链接 关于 linux中的sh脚本语法 玩linux都知道sh脚本的方便,但如何编写sh脚本却是像我这样的新手和菜鸟的难题.能不能编写得出来是一回事,了不了解又是 ...
 - Shell脚本基础知识详细介绍(一)
		
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...
 - Linux运维之shell脚本基础知识
		
1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...
 - bash shell笔记1 脚本基础知识
		
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...
 - Linux shell脚本基础学习详细介绍(完整版)二
		
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
 - 详细介绍Linux shell脚本基础学习
		
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
 
随机推荐
- 【WPF学习】第五十一章 动画缓动
			
线性动画的一个缺点是,它通常让人觉得很机械且不能够自然.相比而言,高级的用户界面具有模拟真实世界系统的动画效果.例如,可能使用具有触觉的下压按钮,当单击时按钮快速弹回,但是当没有进行操作时它们会慢慢地 ...
 - shell 之 case。。。esac多分支选择
			
case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就执行相应的一组操作,如果没有任何值能够匹配,就执行预先设置的默认 ...
 - 一步到位datatabls中文化
			
#一步到位datatabls中文化 加入以下代码 $(document).ready(function () { $('#declarationList').DataTable({ destroy:t ...
 - springmvc两种配置方法
			
基于配置文件xml方式, 配置springmvc步骤: 1.在pom文件中引入jar包: <!--导入springmvc的jar包--> <dependency> <gr ...
 - python django 之 django自带的分页
			
1. 例1: 基础的分页 1). vim app01/views.py def users(request): from django.core.pagina ...
 - GO - if判断,for循环,switch语句,数组的使用
			
1.if - else if - else的使用 package main import "fmt" func main() { // 1.简单使用 var a=10 if a== ...
 - 关于Html+css阶段学习总结
			
一.学习经历 进入大学不久,就加入了社团,从而对前端有了一个初步的了解,之后也做过一些学校的官网,积累了一些微小的经验. 到了大二的时候,学校开设了专门的html+css课程,从中也学到许多新的htm ...
 - IDEA激活码(可用2100年,亲测有效)
			
三步骤: 1.下载rar包 2.将rar中bin包内容替换IDEA安装目录下bin内容,然后编辑idea.exe.vmoptions和idea64.exe.vmoptions文件,编辑内容一样 将最后 ...
 - JavaScript对象(二)
			
Part One:对象的三个特性 原型(prototype) 类(class) 可扩展性(extensible attribute) 1,b.isPrototypeOf(o) //判断b是不是o的 ...
 - 【python pip】一招解决pip下载过慢问题
			
目录 概述 壹:问题描述 贰:解决过程 一.问题分析 二.问题解决 方法一:下载时加入参数-i [镜像源地址] 方法二:设置源 三.国内镜像源地址 叁:作者有话 作者 概述 在我们经常使用pip安装插 ...