【shell】shell基本用法

希望各位不要白piao,点个赞或者刷个评论再走,还有【禁止转载】
*这篇文章就是讲解变量在shell中是什么样的(我手头的笔记比较多,只能慢慢发,如果真的有某一方面特别的需求,可以在评论中回复,如果我有相关的资料我会优先发出来)
这篇文章不会教你如何用cd, ls, pwd 这种基本到不能再基本的shell命令。这篇文章主要写了如下几个方面:

文件名代换
命令代换
算术代换
转义字符\ -> 特殊文件名的处理
单引号
双引号 ->单引号与双引号的区别

文件名代换

文件名代换(Globbing):* ? [] →通俗点说就是模糊匹配 通常用于模糊查询
这些用于匹配的字符称为通配符(Wildcard),具体如下:
通配符
* 匹配0个或多个任意字符
? 匹配一个任意字符
[若干字符] 匹配方括号中任意一个字符的一次出现
ls /dev/ttyS* #列出/dev/下以ttyS开头的文件名
ls ch0?.doc #列出ch0[这里可以是任何东西].doc
ls ch0[0-2].doc#列出ch01.doc ch02.doc ch00.doc
ls ch[012] [0-9].doc#列出ch00.doc ch01.doc ch02.doc ch03.doc等等中间两位数一个来字0,1,2另一个来自0,1,2,3,4,5,6,7,8,9

注意,Globbing所匹配的文件名是由Shell展开的,也就是说在参数还没传给程序之前已经展开了,比如上述ls ch0[012].doc命令,如果当前目录下有ch00.doc和ch02.doc,则传给ls命令的参数实际上是这两个文件名,而不是一个匹配字符串。

命令代换

命令代换:$() 或者 用``引用起来
Shell先执行该命令,然后将输出结果立刻代换到当前命令行中。首先我们来说一下``例如定义一个变量存放date命令的输出:
DATE=date
echo ${DATE}

命令代换也可以用$()表示:
DATE=$(date) #这一行的命令与上面完全一样,前期还是用这种吧,后期写的熟练了用上面那个,因为上面那个写的比较快

算数代换

算术代换:$(())
用于算术计算,$(())中的Shell变量取值将转换成整数,同样含义的$[]等价例如: VAR=45
echo $(($VAR+3)) #结果是48
$(())中只能用±*/和()运算符,并且只能做整数运算!!!
$(())中只能用±*/和()运算符,并且只能做整数运算!!!
$(())中只能用±*/和()运算符,并且只能做整数运算!!!

按照进制对数字进行运算
$[base#n],其中base表示进制,n按照base进制解释,后面再有运算数,按十进制解释。
echo $[2#10+11] #2的十进制就是2,11的十进制是11,他们两个相加就是13
echo $[8#10+11] #8的十进制是8,11的十进制是11,他们两个相加就是19
echo $[10#10+11] #10的十进制就是10,11的十进制是11,他们两个相加是21

转义字符\

和C语言类似,\在Shell中被用作转义字符,用于去除紧跟其后的单个字符特殊意义(回车除外),换句话说,紧跟其后的字符取字面值。例如:
echo $SHELL
/bin/bash
echo \$SHELL
$SHELL
echo \\
\
比如创建一个文件名为“$ $”的文件可以这样:
touch \$\ \$
这里就是先把$给转义了,然后再把空格给转义了,最后把$再给转义了。工作中是不可能写这种东西了,无异于寻死,所以说大家知道就好。

还有一个字符虽然不具有特殊含义,但是要用它做文件名也很麻烦,就是-号。如果要创建一个文件名以-号开头的文件,这样是不行的:
touch -hello
如果输入上面的命令会出现下面的报错:
touch: invalid option – h
Try touch --help’ for more information.
即使加上\转义也还是报错:
touch \-hello
touch: invalid option – h
Try touch --help’ for more information.

因为各种UNIX命令都把-号开头的命令行参数当作命令的选项,而不会当作文件名。如果非要处理以-号开头的文件名,可以有两种办法:
touch ./-hello
或者
touch -- -hello
\还有一种用法,在\后敲回车表示续行,Shell并不会立刻执行命令,而是把光标移到下一行,给出一个续行提示符>,等待用户继续输入,最后把所有的续行接到一起当作一个命令执行。例如:
ls \
> -l
@experience:以上两行就相当于ls -l命令的输出,只不过一行写不下分两行写了,这个是很经常用到的,比如你用shell调用java写的job,里面的参数特别长你不能在一行上写吧,这时候就会用这个东西

单引号

单引号(在单引号中输入回车 echo的时候回车会生效)
和C语言不一样,Shell脚本中的单引号和双引号一样都是字符串的界定符),而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。如果引号没有配对就输入回车,Shell会给出续行提示符,要求用户把引号配上对。例如:
echo '$SHELL'
$SHELL
echo 'ABC\(回车)
> DE'(再按一次回车结束命令)
ABC
DE

双引号

被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引号的处理方式不同
DATE=$(date)
echo "$DATE"
echo '$DATE'
在这里插入图片描述
这样就一目了然的知道了双引号跟单引号的区别

发布了25 篇原创文章 · 获赞 25 · 访问量 2249

猜你喜欢

转载自blog.csdn.net/weixin_43071838/article/details/104529485