【Shell教程】⼆----Shell变量,通配符,转义符
Shell变量
Shell中有三种变量 ⽤户变量,系统变量和特殊变量
⽤户变量,系统变量已经说过了,这⾥我们说下特殊变量
shell的特殊变量都以$符开头,后⾯加上对应的字符,表⽰不同的功能
$n
功能描述:n为数字,$0代表该脚本名称,$1、$2、$3、$4、$5 表⽰运⾏脚本时,传给程序的参数,⽤空格分开,⼗以上的参数需要⽤⼤括号包含,如${10}
$#
功能描述: 传给 shell 脚本参数的数量
实例:
#!/bin/bash
echo" 脚本名称:$0第⼀个参数为:$1 "
echo"参数个数: $#"
然后运⾏脚本:
$*
功能描述: :传给 shell 脚本参数的内容 ,
$@
功能描述: :传给 shell 脚本参数的内容 ,
共同点:
$* 和$@ 都表⽰传递给函数或脚本的所有参数,不被双引号(" “)包含时,都以”$1" “$2” … “$n” 的形式输出所有参数。
区别:
加上双引号"“括住时,$*把所有的参数看成⼀个整体,以”$1 $2 … $n"的形式输出所有参数 $@把每个参数单独存储,以"$1" “2"…"
n” 的形式输出所有参数。
实例:
#!/bin/bash
echo"$0$1$2"
echo $*
echo  $@
正常输出时都是输出全部参数
加双引号之后:
#!/bin/bash
for i in "$*"
do
echo$i
done
for i in "$@"
do
echo$i
done
$?
功能描述: Shell命令执⾏的返回的状态。0 表⽰正确,⾮ 0 表⽰出错实例:
⾸先执⾏脚本parameter,然后echo输出脚本是否正常执⾏
如果没有正常执⾏,会输出⾮0
$$
功能描述: 输出当前执⾏的进程号
实例:
#!/bin/bash
echo"$$"
转义字符:
换⾏符: ""进⾏参数换⾏/续⾏
反斜杠\ 后⾯紧跟回车,表⽰下⼀⾏是当前⾏的续⾏.
#!/bin/bash
echo"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*
linuxshell脚本怎么运行结果发现是错误的
需要加上双引号,才能够正确识别
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