Shell变量

Shell中有三种变量 用户变量,系统变量和特殊变量
用户变量,系统变量已经说过了,这里我们说下特殊变量

shell的特殊变量都以$符开头,后面加上对应的字符,表示不同的功能

$n

  • 功能描述:n为数字,$0代表该脚本名称,$1、$2、$3、$4、$5 表示运行脚本时,传给程序的参数,用空格分开,十以上的参数需要用大括号包含,如${10}

$#

  • 功能描述: 传给 shell 脚本参数的数量

实例:

#!/bin/bashecho " 脚本名称:$0  第一个参数为:$1 "
echo "参数个数: $#"

然后运行脚本:

$*

  • 功能描述: :传给 shell 脚本参数的内容 ,

$@

  • 功能描述: :传给 shell 脚本参数的内容 ,

共同点:
$* 和$@ 都表示传递给函数或脚本的所有参数,不被双引号(" “)包含时,都以”$1" “$2” … “$n” 的形式输出所有参数。

区别:
加上双引号"“括住时,$*把所有的参数看成一个整体,以”$1 $2 … $n"的形式输出所有参数 $@把每个参数单独存储,以"$1" “2"…"2" … "2"…"n” 的形式输出所有参数。

实例:

#!/bin/bash
echo "$0  $1   $2"
echo $*
echo $@


正常输出时都是输出全部参数

加双引号之后:

#!/bin/bashfor i in "$*"
doecho $i
donefor i in "$@"
doecho $i
done

$?

  • 功能描述: Shell命令执行的返回的状态。0 表示正确,非 0 表示出错

实例:

首先执行脚本parameter,然后echo输出脚本是否正常执行

如果没有正常执行,会输出非0

$$

  • 功能描述: 输出当前执行的进程号

实例:

#!/bin/bashecho "$$"

转义字符:

换行符: ""进行参数换行/续行
反斜杠\ 后面紧跟回车,表示下一行是当前行的续行.

#!/bin/bashecho "hello\
world"

输出:

其他的转义字符:

转义符 功能
\n 换行
\t 水平制表
\r 回车
\a 警告
\b 回格

Shell通配符

在的 Linux 使用中,有很多时候您可能需要一次对多个相似文件系统对象执行单一操作(比如 rm)。比方说删除所有的.c文件
在这些情况下,你需要在命令行中输入许多文件:

 rm file1 file2 file3 file4 file5 file6 file7 file8

这个时候你可以使用通配符,来解决这个问题,通配符,就是使用特定的匹配字符,去完成特定功能的匹配,当shell在“参数”中遇到了通配符时,将通过在磁盘上查找并找到任何与之匹配的文件。

具体的通配符如下:

通配符 含义 实例
* 匹配 0 或多个字符 a*b,a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如 aabcb, axyzb, a012b, ab
? 匹配任意单个字符 a?b,a与b之间有且只有一个字符, 可以是任意字符, 如 aab, abb, acb, a0b
[ ] 匹配[ ] 中的任意单个字符 a[xyz]b,a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如 axb, ayb, azb
[!list] 匹配除 list 中的任意单一字符 a[!0-9]b,a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如 axb, aab, a-b
[c1-c2] 匹配 c1-c2 中的任意单一字符 a[!0-9]b,a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如 axb, aab, a-b

比方说你要查看所有的.c文件 可以使用

ls  *.c

简单地说,把通配符理解为shell 特殊替换字符就可。涉及的只有,*,? [] ,{} 这几种。

Shell转义字符

有的时候,我们匹配的内容或者想要显示的内容里面会存在 *,?,[ ]等通配符中的符号。为了表示他们原来的意思,我们需要使用转义字符 \,如 a*c 表示匹配 a*c 这三个字符

\ 本身用 \ 表示。

举一个简单的例子 比方说你想寻找一个命名为 file*的文件 你想要:

find -name file*

新建file1 file2 file* 然后查找file*

结果发现是错误的

需要加上双引号,才能够正确识别

find -name “file*”


结果发现输出的是file1 和 file2 没有file* 因为这里的*被当成了通配符,自动去匹配了任意字符

那怎么解决呢? 有两种方式 一种是用\ 转义一下 显示的就是file*了

这里再说一下用户变量命名时 ` `(反斜号)‘’(单引号)""(双引号) 的区别

在shell中,字符可以被 ` `(反斜号)‘’(单引号)""(双引号) 包含

  • “”:双引号,包含的变量名称,会被解析。
  • ‘’:单引号,包含的变量名称,不会被解析。
  • ``:反引号,包含的内容,做为 shell 命令被执行,执行结果替换原内容。

‘’单引号

又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉 包含的变量名称,不会被解析,任何字符都会原样输出

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
echo 'hello \n world'

输出hello \n world \n不会被转义

str=hello
echo '¥str'

输出$str

“”:双引号

又叫软转义,可以存在通配符,也可存在变量

str=hello
echo -e "$str \n world"

输出:
hello
world

echo 输出的时候加上-e 表示识别转义字符,默认不识别
$变量 表示是变量

``反引号

包含的内容,做为 shell 命令被执行,执行结果替换原内容

echo -e "\a现在时间 \n `date`"

输出:

Shell注释

以 # 开头是单行注释注释

#--------------------------------------------
# 这是一个注释

多行注释:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

【Shell教程】二----Shell变量,通配符,转义符相关推荐

  1. 【2017-02-19】数据类型、类型转换、常量、变量、转义符。

    一.数据类型. 数据类型分为:基本数据类型和引用类型. 基本数据类型又分为:值类型.布尔型(bool对错类型)和字符型(char单一字符).其中,值类型分为整型和浮点型.整型又分为int(常用整型)和 ...

  2. shell教程(二) 四种工作模式

    标准 根据 POSIX 标准,Shell 分为登录(login).非登录(non-login)和交互(interactive).非交互(non- interactive)两个维度的处理.因此 bash ...

  3. 一天学会shell语言,shell教程,shell简单入门,shell中文文档

        shell语言是一门linux系统下的工具语言,主要用于写一些linux系统下的操作命令,实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.或者直接理解为shell命 ...

  4. java sql 通配符_sql 通配符 转义符

    一.搜索通配符字符的说明 可以搜索通配符字符.有两种方法可指定平常用作通配符的字符: * 使用 ESCAPE 关键字定义转义符.在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符.例如,要搜 ...

  5. 固本培元之二:字符串和转义符

    字符串string. 1.不可变性:一但被赋值就会再变化,每次字符串的变化都会把指针指向新的字符串. 2.可以用:字符串之间可以用串联运算符(+)产生出新的字符串. 3.常用属性:Length表示字符 ...

  6. html取消转义符,HTML转义符

    .NET 基础 一步步 一幕幕[运算符.占位符.转义符] 运算符.占位符.转义符 好吧,在五局全胜之后,终于升到了三个钻,距离一个星星还有一大段距离,忽然想起来今天的博客还没写,果断坑队友,来写博客了 ...

  7. 关于Java正则表达式中转义符“\\”的使用

    一.前言 在复习到正则表达式这一部分的内容时,我注意到Java中要想使用转义符必须要用双反斜杠来达到其他语言中单反斜杠的效果,出于对这个问题的好奇我查阅了一些资料,并初步了解了Java正则表达式中转义 ...

  8. Linux Shell 通配符、元字符、转义符使用实例介绍

    说到shell通配符(wildcard),大家在使用时候会经常用到.下面是一个实例: ? 1 ? 1 2 3 4 [chengmo@localhost ~/shell]$ ls a.txt  b.tx ...

  9. Linux Shell 通配符、元字符、转义符使用实例介绍--Learning the korn shell

    说到shell通配符(wildcard),大家在使用时候会经常用到.下面是一个实例: ? 1 ? 1 2 3 4 [chengmo@localhost ~/shell]$ls a.txt  b.txt ...

最新文章

  1. 还在用Matplotlib? 又一可视化神器Altair登场 | 技术头条
  2. Spring Session - Cookie VS Session VS Token 以及 Session不一致问题的N种解决方案
  3. 包钢集团、云南建投、南粤交通等大型国企选择用友BIP 实现财务数智能化
  4. php 正则表达式 环视,php正则表达式环视详解
  5. 企业邮箱服务器删除邮件,企业邮箱Webmail对邮件进行删除或者清空邮件的方法...
  6. 计算机网络项目——最小网元设计(前情提要和项目概述)
  7. 华为被起诉了!你肯定想不到原告是谁!
  8. HTTP GET/CONNECT代理区别
  9. Selenium笔记:PO模型
  10. 特斯拉开始发布其汽车的开源Linux软件代码
  11. 非常实用的一键开关机电路
  12. mean函数 median函数【Matlab】
  13. 佳能6d2无线链接计算机操作,玩转EOS 6D无线WiFi功能三步骤
  14. EDP/DP转HDMI OUT 支持常用分辨率,最大支持4K@60Hz
  15. 腹肌和皮肤应该怎么画?女生腹部马甲线画法
  16. 2799元的魅族旗舰PRO5,虽“不完美”但已尽量追求极致---ESM
  17. 异常处理基于注解ExceptionHandler
  18. 用python定义两个元组_python初学-元组、集合
  19. js如何降低全局变量带来的命名污染
  20. 初中人教版地理教案四-Leo老师

热门文章

  1. scrapy使用meta在各个模块的组件之间传递数据
  2. 正则匹配——python用一个正则表达式从字符串中提取数字(包括整数、小数、正负数)
  3. 使用jieba提取文本TF-IDF关键词
  4. java调用linux命令
  5. 怎样进行前后台交互_vivo X60 Pro评测,蔡司镜头+OriginOS+微云台+三星1080强强组合...
  6. 干扰网络信号的app_解决家中WIFI信号无法全面覆盖的方法
  7. 一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?...
  8. 【线段树】HDU 3397 Sequence operation 区间合并
  9. pygtk在windows的安装
  10. C#实现 获取指定字节长度 中英文混合字符串 的方法