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 -
表示输出流或输入流
将前面的输出,通过管道交给后面的命令,前面的压缩,后面的解压。