linux之shell-特殊字符

Shell 中的特殊字符参考链接:

https://www.runoob.com/w3cnote/shell-special-char.html

----------$符号(美元符号)----------

1、取变量的值

# a=10

# echo $a

10

2、正则表达式表示行尾

egrep ':$' /etc/inittab 

egrep ‘^hello$' file

3、额外补充

$0:当前shell脚本的文件名
$1:shell脚本的第一个位置参数
$2:shell脚本的第二个位置参数
$3:shell脚本的第三个位置参数
$9之后要加{};例如${10}、${11}...
$*:所有传递的位置参数
$@:所有传递的位置参数
$*与$@区别:不加""(双引号)时候两者相同
  加了引号后,$*把参数作为一个整体(单字符)返回,$@把每个参数作为一个字符串返回
$#:所有传参的总个数
$$:当前程序运行的PID,即脚本运行的当前进程ID号
$?:上一个命令执行的结果(0为成功非0为失败)
$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)
$-:显示shell使用的当前选项,与set命令功能相同
$( )中放的是命令,相当于` `(反引号),例如todaydate=$(date +%Y%m%d)意思是执行date命令,
返回执行结果给变量todaydate,也可以写为todaydate=`date +%Y%m%d`;
${ }中放的是变量,例如echo ${PATH}取PATH变量的值并打印,也可以不加括号比如$PATH

----------;分号----------

表示连续运行命令

# ifdown eth0;ifup eth0

----------|管道----------

1、正则表达式中表示或者

#echo "lllyy"|grep '(lll|yy)'{2}   表示匹配llll或者yyyy的字符

2、前面命令的标准输出作为后面命令的标准输入

#ifconfig |grep eth0   表示ifconfig查出来的信息然后过滤出eth0的这一行

----------&----------

将命令放到后台执行;且放在完整指令列的最后端,即表示将该指令列放入后台中工作

#mysql_safe --user=mysql &      将mysql放到后台启动

#tar cvfz data.tar.gz data > /dev/null&   将data.tar.gz压缩包放到后台解压,执行得到的结果输出到/dev/nul里面

表示标准输出和标准错误输出

#ifconfig &>/del/null     将ifconfig执行得到的结果输出到/dev/nul里面

----------&&----------

逻辑符号,代表and的逻辑的符号;前面命令返回值为0才执行后面的命令

#ls && echo "ok"

---------||----------

逻辑符号,代表or的逻辑的符号;前面命令返回值为非0才执行后面的命令

#lls && echo "ok"

----------#----------

1、#表示注释

  $#表示位置参数的个数

#echo $#

0

2、${#变量名}   表示变量的长度

#a='hello'

#echo ${#a}

5

3、${#变量名[@]}  表示数组的个数

#a=(1 2 3)

#echo $(#a[@]}

----------!----------

叹号;’将命令或者条件表达式的返回值取反

#if ! [ 1<2 ]; then echo 'ok'; else echo 'no'; fi

ok

执行历史命令

# history 
1  ls
2  tail test1.txt
3  mysql -uroot -p123
4  ls /tmp/
5  cd /tmp/
[root@localhost ~]# !4
ls /tmp/
account.sql  data.sql  mysql.sock  t1.txt  t2.txt 

!!:执行上一条命令

vi或者ftp中执行外部shell命令

例如:在vim中,想要执行一条命令,就在末行模式,输入!感叹号后面加上要执行的命令

间接应用变量

例如:${!a} ---- 间接取b 的值

---------->----------

 大于号;表示输出重定向

echo '123' >test.txt     表示将123输入到文件text.txt中

>文件名;表示清空文件中的内容

>text.txt     表示清空text.txt文件中的所用内容

---------->>----------

输出重定向,追加

echo "abc" >>text.txt      表示将abc追加到文件text.txt中

----------<----------

小于号;表示输入重定向!本来需要从键盘获取输入的命令会转移到文件读取内容,注意 "<"只能从文件中读取输入。

#mysql  -u  root   -h 127.0.0.1  -p"MySQL@123"   <  dump.sql       #导入数据库

 # passwd  --stdin root  < passwd.txt           修改密码

  

 ----------<<----------

Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

它的基本的形式如下:

command << delimiter
    document
delimiter

它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

注意:

  • 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
  • 开始的delimiter前后的空格会被忽略掉

实例

在命令行中通过 wc -l 命令计算 Here Document 的行数:

$ wc -l << EOF
    欢迎来到
    菜鸟教程
    www.runoob.com
EOF
3          # 输出结果为 3 行
$

我们也可以将 Here Document 用在脚本中,例如:

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

cat << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF

执行以上脚本,输出结果:

欢迎来到
菜鸟教程
www.runoob.com

 参考链接:https://www.runoob.com/linux/linux-shell-io-redirections.html

----------/dev/null----------

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到/dev/null

#command > /dev/null

/dev/null是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是/dev/null文件

非常有用,将命令的输出重定向到它,会起到“禁止输出”的效果。

如果希望屏蔽stdout和stderr,可以这样写:

#command > /dev/null 2>&1

注意:0是标准输入(STDIN),1是标准输出(STDOUT),2是标准错误输出(STDERR)

这里的2和>之间不可以有空格,2>是一体的时候才表示错误输出。

----------- -减号 -----------

算术运算中的减号 - 例如:10-2

命令的选项 - 例如:ls -l

上一次工作目录 - 例如:cd -

通配符和正则表达式中表示范围 - 例如:[a-z]

tar -cvf - /home |tar -xvf -

表示输出流或输入流

将前面的输出,通过管道交给后面的命令,前面的压缩,后面的解压。

原文地址:https://www.cnblogs.com/ly2020/p/13191998.html