Shell脚本基础之Bash的基本功能——历史命令(history)、命令和文件补全(Tab键)、命令别名(alias)、常用快捷键,输入输出重定向、多命令顺序执行、管道符、通配符与其他特殊符号

一、Bash的基本功能

1、历史命令:

Linux非常的智能会将我们敲过的所有命令,都保存到我们的计算机当中。只要我们使用history命令直接回车,就可以看到我之前敲过的命令。

1.1 > 历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改。

命令格式:[root@localhost ~]# history [选项] [历史命令保存文件]

  • 选项:
    • -c:清空历史命令,如果没有特殊情况不建议使用 -c 命令,清楚历史命令;
    • -w:强制把缓存中的历史命令写入指定保存文件。
      若不写“ 历史命令保存文件 ”,则默认为:~/.bash_history。并且每个用户的历史命令都是单独保存的,如:root历史命 ——> root/.bash_history 等等;

直接用history命令:

[root@root ~]# history
    1  ls
    2  cd vmware-tools-distrib/;
    3  cd vmware-tools-distrib/
    4  ls
    ... ...

直接用history命令去查看可以看到刚才的命令已经保存到缓存中了。但是如果我们通过-vi .bash_history-去打开历史夹目录下的保存文件,没有刚刚缓存中的历史记录。只有正常登陆退出之后,缓存中的历史命令才能够保存到历史夹下的保存文件中。

[root@root ~]# vi .bash_history

.bash_history保存文件如下:
ls
cd vmware-tools-distrib/;
cd vmware-tools-distrib/
ls
./vmware-install.pl
reboot
etc/shells
ls /etc/shells
shell
shells
vi /etc/shells

-w 的意思是:不等我退出,直接将缓存中的历史命令保存到-.bash_history-中的文件中。

[root@root ~]# history -w
[root@root ~]# vi .bash_history

.bash_history保存文件如下:
ls
cd vmware-tools-distrib/;
cd vmware-tools-distrib/
ls
./vmware-install.pl
reboot
etc/shells
ls /etc/shells
shell
shells
vi /etc/shells
cd ~
echo -e "\e[1;3]m abcd \e[0m]"
echo -e "\e[1;3]m abcd \e[30m]"
echo -e "\e[1;3]m abcd \e[0m]"
echo -e "\e[1;31m abcd \e[0m]"
echo -e "\e[1;31m abcd \e[0m"
echo -e "\e[1;35m abcd \e[0m"
gedit
vim hello.sh
chmod 755 hello.sh
cd /sh
".bash_history" 51L, 732C

1.2 > 历史命令的调用:

  • 使用上,下箭头调用以前的历史命令;
  • 使用 “ !n ”重复执行第n条命令;
  • 使用 " !! "重复执行上一条命令;
  • 使用 “ !字串 ” 重复执行最后一条以该字串开口的命令;
2、命令与文件补全

在Bash中,命令与文件补全是非常方便与常用的功能,我们只要输入命令或文件时,按 “ Tab ”键会自动进行补全。

当按一下“Tab”时命令没有补全,说明可能该字符包含有多个命令或者目录;按两下“Tab”键就会系统中所有已改字符开头的命令或目录都显示出来,然后选择输入即可。要养成按“Tab”键的习惯

  • 按“Tab”键进行命令补全
[root@root 桌面]# vim /etc/profile
[root@root 桌面]# user
useradd     userformat  userinfo    usermount   userpasswd  
userdel     userhelper  usermod     usernetctl  users       
[root@root 桌面]# useradd 
  • 按“Tab”键进行目录补全
[root@root 桌面]# vi /usr/l
lib/     lib64/   libexec/ local/   
[root@root 桌面]# vi /usr/local/
3、命令别名

别名,即给这个命令起了一个小名。别名的好处就是:让服务器按照你的习惯来进行命令的命名和使用。别名命令的优先级高于原有命令的优先级。

设置命令别名:
通过命令行定义的别名,只会临时生效,一旦重启系统这个别名就会消失。

命令格式:[root@localhost ~]# alias 别名=‘原命令’

查询命令别名:

命令格式:[root@localhost ~]# alias

[root@root 桌面]# alias vi='vim'
[root@root 桌面]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
3.1> 命令执行顺序

命令执行顺序:

  1. 第一顺位:执行绝对路径或者相对路径执行的命令;
  2. 第二顺位:执行别名;
  3. 第三顺位:执行Bash的内部命令;
  4. 第四顺位:执行按照$PATH环境变量的目录查找顺序找到的第一个命令;

打印按照$PATH的环境变量。

  • 当我去敲某一条命令时,它会按照$PATH环境的定义,在这个路径中去寻找有没有这个ls的命令,若在找到了,则接着就执行这个命令。如果找完所有路径都没有找到,就会显示:command not found,显示错误。这就是PATH环境变量的作用。

  • 归根结底,在Linux当中所有的命令和可执行文件都是用过绝对路径来执行的。之所以内部命令不使用绝对路径,是因为系统通过$Pash环境变量做了一个简化操作。通过whereis命令根本就找不到Shell自带的命令的文档,如cd命令,只找到了两个帮助文档。

[root@root 桌面]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin

通过whereis命令查看这个命令文件存放在什么位置:

[root@root 桌面]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz

通过whereis命令根本就找不到Shell命令自带的文档。如cd命令,只找到了两个帮助文档;

[root@root 桌面]# whereis cd
cd: /usr/share/man/man1p/cd.1p.gz /usr/share/man/man1/cd.1.gz
3.2 > 让别名永久生效

通过命令行定义的别名,只会临时生效,一旦重启系统这个别名就会消失。如果要让命令长久生效,归根结底是写入相应的配置文件,例如,想让root用户永久的执行vi=“vim”,那么修改的就是root下的.bashrc环境变量文件。

[root@root ~]# vi ./.bashrc


修改.bashrc文件中,alias vi='vim'后保存,这个别名将永久生效:
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
~     
3.3 >删除别名

命令格式:[root@root ~]# unalias 别名

[root@root ~]# alias 
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[root@root ~]# unalias vi

[root@root ~]# alias 
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
4、Bash常用快捷键:
快捷键作用
ctrl + A把光标移动到命令开头。如果我们输入的命令过长,想把光标移动到命令行开头是使用。
ctrl + E把光标移动到命令行结尾。
ctrl + C强制终止当前命令。
ctrl + L清屏,相当于clear命令。
ctrl + U删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个个字符的删除。
ctrl + K删除或剪切光标之后的内容。
ctrl + Y粘贴 ctrl + U或 ctrl + K的内容。
ctrl + R按下 ctrl + R之后,就会出现搜索页面,只要输入搜索内容,就会从历史命令中进行搜索。
ctrl + D退出当前终端。
ctrl + Z暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理张杰详细介绍。
ctrl + S暂停屏幕输出。
ctrl + Q恢复屏幕输出。

注意:上面定义的大写字母,其实只要:[Ctrl + 字母],就可以了不用大写字母。

使用[Ctrl + U]和[Ctrl + k]命令后,就可以[ctrl + y]命令进行粘贴了。

  • Ctrl + R 命令
[root@root ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
(reverse-i-search)`a': alias ——>这是只要按回车键,就可以执行alias这条命令。

5、输出重定向
5.1> 标准输入输出

在这里插入图片描述

在Linux当中,所有的内容都是文件,因此输入设备键盘和输出设备显示器也是文件,即/dev/stdin和/dev/sdout、/dev/sderr——>一个正确输出,一个错误输出;

5.2> 输出重定向—— 正确输出和错误输出分别保存

标准输出应该是,当我输入命令回车后,输出到屏幕上的。现在我不让它输出到屏幕,改变了它的输出方向,即把它输出到文件当中,这就叫输出重定向。因为改变了输出方向,不在输出到原始的屏幕上,而是输出到文件当中,因此叫输出重定向。

注意:不是所有的命令都是可以用输出重定向的,这个命令必须的有输出才可以,比如cd命令,cd进入某一个目录只要不报错,它是不会有任何输出的,这个时候用输出重定向是没有任何意义的。

在这里插入图片描述上图应该注意的事项:

  • 命令 > 文件——> 以覆盖的方式,针对正确命令;
  • 命令 > >文件——> 以追加的方式,针对正确命令;
  • 错误命令 2>文件 ——>以覆盖的方式,针对错误命令——>2和>(大于号)之间不能有空格,否则不能保存错误重定向;
  • 错误命令 2>> 文件 ——>以追加的方式,针对错误命令——>2和>>(双大于号)之间不能有空格,否则不能保存错误重定向;;

举例说明:

  • 命令 > 文件——> 以覆盖的方式,针对正确命令;
[root@root 桌面]# cd ~
[root@root ~]# ls
abc              install.log         公共的  视频  文档  音乐
anaconda-ks.cfg  install.log.syslog  模板    图片  下载  桌面
[root@root ~]# ls > abc
[root@root ~]# ls
abc              install.log         公共的  视频  文档  音乐
anaconda-ks.cfg  install.log.syslog  模板    图片  下载  桌面
[root@root ~]# cat abc
abc
anaconda-ks.cfg
install.log
install.log.syslog
公共的
模板
视频
图片
文档
下载
音乐
桌面
[root@root ~]# date
2019年 07月 06日 星期六 07:59:23 CST
[root@root ~]# date > abc
[root@root ~]# cat abc
2019年 07月 06日 星期六 07:59:35 CST
[root@root ~]# 
  • 命令 > >文件——> 以追加的方式,针对正确命令;
[root@root ~]# date > abc
[root@root ~]# cat abc
2019年 07月 06日 星期六 07:59:35 CST
[root@root ~]# date >> abc
[root@root ~]# cat abc
2019年 07月 06日 星期六 07:59:35 CST
2019年 07月 06日 星期六 08:00:43 CST
  • 错误命令 2>> 文件 ——>以追加的方式,针对错误命令;
[root@root ~]# lsg 2>>abc
[root@root ~]# cat abc
2019年 07月 06日 星期六 07:59:35 CST
2019年 07月 06日 星期六 08:00:43 CST
bash: lsg: command not found
5.2> 输出重定向——正确输出和错误输出同时保存

以上四条命令是有一些问题的,这四条命令可以将正确命令和错误命令保存下来,但是,真确命令和错误命令的保存格式是不同的,这就需要首先人为的去判断这条命令是否能够正确执行或错误执行,正确执行按前两条命令,错误执行按后两条命令执行,如果我能知道这条命令是错误的,我干嘛还要写错的,直接改正了就行了呗,因此,在实际中将正确输出和错误输出分开保存的方法在实际中是不可取的,在实际中用处不大。

因此在实际中我们用的最多的是,将正确输出和错误输出同时保存到文件当中的命令,如下图所示:

  • 以下5条命令都是将正确输出和错误输出都保存在同一个文件当中,不同点是:>(单大于号)是覆盖,>>(双大于号)是追加;
  • 命令 > 文件 2>&1 ——>
    • 2>&1——> 将错误输出首先保存到正确输出里面;
    • 命令 > 文件 2>&1 ——> 然后将正确输出和错误输出同时保存到指定的文件当中;
  • 命令>>文件1 2>>文件2 ——> 将正确输出和错误输出分开保存,即将正确输出保存到文件1,将错误输出保存到文件2。

在这里插入图片描述命令举例如下:

  • 命令 >> 文件 2>&1 ——> 不管命令正确输出还是错误输出都保存到同一个文件当中;
[root@root ~]# lst >> bcd 2>&1
[root@root ~]# cat bcd
bash: lst: command not found
[root@root ~]# ls >> bcd 2>&1
[root@root ~]# cat bcd
bash: lst: command not found
abc
anaconda-ks.cfg
bcd
install.log
install.log.syslog
公共的
模板
视频
图片
文档
下载
音乐
桌面
  • 命令 &>>文件 ——>将命令正确结果和错误结果都保存到同一个文件当中;
[root@root ~]# date &>>cde
You have mail in /var/spool/mail/root
[root@root ~]# cat cde
2019年 07月 06日 星期六 08:52:26 CST
[root@root ~]# datehfg &>>cde
[root@root ~]# cat cde
2019年 07月 06日 星期六 08:52:26 CST
bash: datehfg: command not found

命令 &>/dev/null

将一个命令的结果以&的方式丢弃到/dev/null中,/dev/null 是我们Linux当中的一个特殊文件,这个文件从字面意义上来说是黑洞或空是不存在,可以将它当成垃圾箱。如果一条命令这么写不管有如何报错都丢到垃圾箱里面,也就是说我就让你执行不管是正确执行还是错误执行,都人道垃圾箱里面。你只要执行就好,我不管你正确还是错误的。

  • 命令>>文件1 2>>文件2

这个写法是将正确命令和错误命令分开保存,

[root@root ~]# ls >> def 2>>efg
[root@root ~]# cat def
abc
anaconda-ks.cfg
bcd
cde
def
efg
install.log
install.log.syslog
公共的
模板
视频
图片
文档
下载
音乐
桌面
[root@root ~]# cat efg
[root@root ~]# lslll >> def 2>>efg
[root@root ~]# cat efg
bash: lslll: command not found
[root@root ~]# cat def
abc
anaconda-ks.cfg
bcd
cde
def
efg
install.log
install.log.syslog
公共的
模板
视频
图片
文档
下载
音乐
桌面
6、输入重定向

输入重定向,我们执行某些命令的参数应该通过键盘来写入,现在我们改变它的输入方向不在通过键盘来输入,而是作为文件来给它进行输入,这就是输入重定向。输入重定向在实际的工作中用的不多。

命令格式:[root@localhost ~]# wc [选项] [文件名]
命令<文件 ——> 把文件作为命令的输入;

选项:

  • -c:统计字节数;
  • -w:统计单词书;
  • -l:统计行数;

wc命令是一条统计命令。快捷键Ctrl+d 将你输入的内容作为这个命令的标准输入,会统计你输的:x行 x单词 x字符,有空格算一个单词,字符当中要包含回车符。

举例如下:

[root@root ~]# wc
wertt
wedfg
sdf gjg
sdfc
sdf
      5       6      29
[root@root ~]# wc < anaconda-ks.cfg
  72  142 1498
[root@root ~]# wc -l < anaconda-ks.cfg
72
7、多命令顺序执行

在这里插入图片描述以上三种命令的区别:

  • ; ——> 它们两个命令之间或多个命令之间没有任何逻辑关系,仅仅只是因为命令1执行完执行命令2,就算命令1不正确执行报错了命令2依然执行,仅仅只是为了简化我们的操作,不想一条一条,将所有命令放在一起去执行,仅仅就这么一个作用。多个命令之间都一定的逻辑关系。 这条命令在dd命令这行的时候有一些帮助!
  • &&——> 逻辑与的关系。即只有当命令1正确执行时,那么命令2才会执行。如果命令1不正确执行,那么命令2是不会执行的。
  • | | ——> 逻辑或的关系。即只有当命令1不正确执行时,那么命令2才会执行;如果命令1正确执行,那么命令2就不会执行。
7.1 > 命令1 ; 命令2

举例说明:
[root@localhost ~]# ls ; date ; cd/user : pwd

(这个命令会报错,因为cd下面没有user这个文件的)

在这里插入图片描述

  • dd命令的说明:

dd命令是我们Linux系统中进行磁盘复制或者数据复制命令,但是它不是cp命令,因为cp命令只能复制文件。但是dd命令能够复制特殊文件,也能复制分区,甚至整个硬盘,它不仅复制了我们这个这个分区或硬盘当中的数据,还复制率我们这个分区的文件系统,即可以当做磁盘对拷命令来对待。dd命令主要是用来进行磁盘复制

[root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数
.
选项:

  • if=输出文件 ——> 指定源文件或源设备;
  • of=输出文件 ——>指定目标文件或目录设备;
  • bs=字节数 ——> 指定一次输入/输出多少字节,即吧这些字节看作一个数据块,可以这么讲,我给你指定一个大小,每次都复制这么大,可以是1024字节;
  • count=个数 ——> 指定输入/输出多少个数据块;

举例说明:

命令: [root@localhost ~]# date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date
.
命令说明:dd命令下,把/dev/zero的文件,把0作为源文件向目标文件不停的写入,每一次写1kb的0,总共写100000个。一句话,我要创建一个100000的测试文件。执行两遍date,就知道了创建一个100000文件所用的时间。

[root@root ~]# date ; dd if=/dev/zero of=/root/testfile bs=1k count=1000000 ; date
2019年 07月 06日 星期六 15:40:57 CST
记录了1000000+0 的读入
记录了1000000+0 的写出
1024000000字节(1.0 GB)已复制,29.4623 秒,34.8 MB/秒
2019年 07月 06日 星期六 15:41:26 CST
[root@root ~]# ll -h
总用量 977M
-rw-------. 1 root root 1.5K 6月  22 19:26 anaconda-ks.cfg
-rw-r--r--. 1 root root  47K 6月  22 19:26 install.log
-rw-r--r--. 1 root root 9.8K 6月  22 19:23 install.log.syslog
-rw-r--r--. 1 root root 977M 7月   6 15:41 testfile
drwxr-xr-x. 2 root root 4.0K 6月  22 19:30 公共的
drwxr-xr-x. 2 root root 4.0K 6月  22 19:30 模板
drwxr-xr-x. 2 root root 4.0K 6月  22 19:30 视频
drwxr-xr-x. 2 root root 4.0K 6月  22 19:30 图片
drwxr-xr-x. 2 root root 4.0K 6月  22 19:30 文档
drwxr-xr-x. 2 root root 4.0K 6月  22 19:30 下载
drwxr-xr-x. 2 root root 4.0K 6月  22 19:30 音乐
drwxr-xr-x. 3 root root 4.0K 6月  22 19:43 桌面
7.2> 命令1 && 命令2

以软件包安装为例说明:

[root@localhost ~]# ls ./configure && make && make install

  • 这些命令之间是有先后关系或者说依赖关系的,只有前面的命令正确了,后面的命令才能执行。
[root@root ~]# ls && echo yes
anaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐
install.log      testfile            模板    图片  下载  桌面
yes
[root@root ~]# ls hhhhh && echo yes
ls: 无法访问hhhhh: 没有那个文件或目录
7.3> 命令1 || 命令2

只有前面的命令没有执行,后边的命令才会执行。

[root@root ~]# ls hhhhhh || echo no
ls: 无法访问hhhhhh: 没有那个文件或目录
no
[root@root ~]# ls || echo no
anaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐
install.log      testfile            模板    图片  下载  桌面
7.4>前三个综合应用——判断某个命令是否能正常执行

[root@localhost ~]# 命令1 && echo yes || echo no

  • 当命令1能够正常执行时,后面将输出yes;
  • 当命令1不能够正常执行时,后面将输出no;
[root@root ~]# ls && echo yes || echo no
anaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐
install.log      testfile            模板    图片  下载  桌面
yes
[root@root ~]# ls jjjjjjjjjj && echo yes || echo no
ls: 无法访问jjjjjjjjjj: 没有那个文件或目录
no
[root@root ~]# 
8、管道符

命令格式:[root@localhost ~]# 命令1 | 命令2

  • #命令1的正确输出作为命令2的操作对象;
  • 命令1必须有正确的输出才行,如果命令1报错或者命令1没有正确输出,命令2是不能执行的;

举例说明:

8.1> 命令:[root@localhost ~]# ll -a /etc/ | more

  • ll ——> ll命令也就是ls -l命令,即显示文件的详细信息;
  • more ——> more命令是分屏显示,但more命令显示的是文件的内容,不能显示文件的结果,这时候管道符就其作用了。
  • 管道符的作用是:命令1的输出(即, ll -a /etc/ 命令的输出)作为命令2的操作对象(即,more命令的操作对象)。也就是说,more命令本来是要操作一个文件的,但是加了管道符后,more的操作就变成了命令1的输出结果;

8.2> 命令:[root@localhost ~]# netstat -an | grep “ESTABLISHED”

  • netstat命令是查询所有的网络连接,即可以查看本机开启的端口,也可以查看哪些客户端连接。
  • ESTABLISHED——>代表标志连接,
  • netstat -an命令显示当前系统中所有的网络连接将这个命令的输出作为grep命令的操作对象,grep在这个输出当中搜索有没有包含有ESTABLISHED的这一行,有就列出。
[root@root ~]# netstat -an |grep "ESTABLISHED"
udp        0      0 192.168.85.132:48835        192.168.85.2:53             ESTABLISHED 
[root@root ~]# 

小插曲——grep命令:

grep命令是,在文件当中搜索符合条件的字符串。

grep命令格式:[root@localhost ~]# grep [选项] “搜索内容” 文件名
.
选项:

  • -i:忽略大小写
  • -n:输出行号
  • -v:反向查找
  • –color=auto:把搜索出的关键字用颜色显示
[root@root ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

在这里插入图片描述

8、通配符与其他特殊符号
8.1>通配符

通配符是用来匹配文件名的。
在这里插入图片描述关于以上表格的说明:

  • ?和 [ ]的区别:?和[ ]都是匹配一个字符。?是没有范围的(即相匹配谁就匹配谁),但是,[ ]是匹配的是中括号当中的任意一个字符(即,中括号中包含的对象中,它去除一个座位匹配的对象);
  • *表示任意字符前面或后面只能跟特定的字符(如,ls *abc命令后只能跟abc)

示例如下:
(1)命令:[root@localhost ~]# rm -rf *

这个命令的作用是删除当前目录下所有的文件内容。切记,没有在根下或者/bin/或者/etc/使用这条命令,不然就耿丕了。

在这里插入图片描述

[root@root tmp]# touch abc
[root@root tmp]# touch abcd
[root@root tmp]# touch 123
[root@root tmp]# touch 0abc
[root@root tmp]# touch aaabc
[root@root tmp]# ls
0abc  123  aaabc  abc  abcd
[root@root tmp]# ls *abc
0abc  aaabc  abc
[root@root tmp]# ls ?abc
0abc
[root@root tmp]# ls [0-9]abc
0abc
[root@root tmp]# ls [^0-9]abc
ls: 无法访问[^0-9]abc: 没有那个文件或目录
[root@root tmp]# touch aabc
[root@root tmp]# ls [^0-9]abc
aabc
[root@root tmp]# 
8.2> Bash中其他特殊符号

在这里插入图片描述
(1)单引号和双引号的区别,

  • ‘’(单引号)和""(双引号)的使用:当我的内容是一个整体的时候,如果中间有空格这个时候就应该用引号括起来,这个内容才是一个整体。大家都知道,在Linux当中空格表示命令、选项、参数之间的分割,如果没有引号(单引号或双引号)这个空格将会作为分割,而不会作为整体使用。
  • ‘’(单引号)和""(双引号)的区别:
    • 在单引号中所有的特殊符号,如“$”和“ ` ”(反引号)都没有特殊含义;
    • 在双引号中特殊符号都没有特殊含义,但是“$”、“ ` ”和“ \ ”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义;

示例如下:

[root@root 桌面]# cd ~
[root@root ~]# name=sc
[root@root ~]# echo $name
sc
[root@root ~]# echo '$name'
$name
[root@root ~]# echo "$name"
sc

(2)反引号和$()的用法:

反引号和$()是系统命令

[root@root ~]# echo ls
ls
[root@root ~]# echo $(ls)
anaconda-ks.cfg install.log install.log.syslog testfile 公共的 模板 视频 图片 文档 下载 音乐 桌面
[root@root ~]# echo `ls`
anaconda-ks.cfg install.log install.log.syslog testfile 公共的 模板 视频 图片 文档 下载 音乐 桌面

(3)单引号和双引号的区别:

  • [root@root ~]# echo ‘$(date)’——>单引号输出的是引号里面原封不动的字符
  • [root@root ~]# echo “$(date)”——>双引号是先运行双引号里面的命令,再将命令输出;
[root@root ~]# echo '$(date)'
$(date)
[root@root ~]# echo "$(date)"
2019年 07月 07日 星期日 08:23:21 CST
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: shell脚本的基本语法和命令包括以下几个方面。首先,脚本的第一行通常是脚本声明,用来告诉系统使用哪种Shell解释器来执行脚本。其次,在脚本中可以使用注释信息,以#开头,来对脚本功能和命令进行介绍和说明。接下来,可以在脚本中编写可执行命令,这些命令可以是Linux命令或者其他的Shell命令Shell脚本命令的工作方式有两种:交互式和批处理。在交互式模式下,用户每输入一条命令就立即执行。而在批处理模式下,用户可以事先编写好一个完整的Shell脚本Shell会一次性执行脚本中的多条命令。 创建一个Shell脚本可以使用vim或vi编辑器来创建一个.sh文件,然后在脚本中书写Shell脚本声明和命令。注意,保存后的脚本是没有运行权限的,需要使用chmod命令给它授权,才能执行执行文件时,可以使用./来运行shell脚本,也可以使用/bin/bash命令执行脚本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Linux学习系列五:Shell命令脚本的基本语法](https://blog.csdn.net/qq_37085158/article/details/127165599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [shell脚本基本语法](https://blog.csdn.net/weixin_42596778/article/details/106197014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值