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 ...
随机推荐
- 极验验证码破解之selenium
这一篇写完很久了,因为识别率一直很低,没办法拿出来见大家,所以一直隐藏着,今天终于可以拿出来见见阳光了. 哈喽,大家好,我是星星在线,我又来了,今天给大家带来的是极验验证码的selenium破解之法, ...
- GIT 使用(一):安装和配置
安装和配置 Table of Contents 1. 安装 2. 配置 1. 初次运行 Git 前的配置 小结 2. 用户信息 3. 别名 4. 查看已经存在的配置 3. 获取帮助 4. 参考与扩展阅 ...
- C++走向远洋——66(十五周阅读程序)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++走向远洋——29(长方柱类)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:长方柱类.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- python 字典元组集合字符串
s1 = ''hello, world!'' s2 = '\n\hello, world!\\n' print(s1, s2, end='') s1 = '\141\142\143\x61\x62\x ...
- NSInteger打印以及字符串的转换
You can also use %zd (NSInteger) and %tu (NSUInteger) when logging to the console. NSInteger integer ...
- JAVA生成EXCEL模板
JAVA生成excel模板,支持1.必填字段前加 红色 * 2.定义可选值下拉列表 valList3.定义名称并通过名称设置可选值 refName(名称在sheet2,sheet2自动隐藏)4.支持设 ...
- Mac OS X 10.13上 安装odoo 11.0开发环境
0.准备假设homebrew已经安装好没安装的需要先安装,见下面链接http://brew.sh/ 1.安装PostgreSQL$ brew tap homebrew/services$ brew i ...
- Linux与unix shell编程指南
第14章 环境和shell变量 1.使用变量时,尽量用花括号将之括起来,防止shell误解变量值. 2.设置变量时的不同模式 variable-name=value 设置实际值到variable-na ...
- 小程序中内容审核功能的使用(后台使用thinkPHP5.1)
本文包含文本和图片的检测 //接收要检测的文本内容并调用检测方法 public function textCheck(Request $request){ //内容安全识别 $data['conten ...