echo -e 参数
若echo的字符串参数中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
echo -e实例
str1="test1\n"
str2="test2"
echo $str1$str2
没有 -e 输出为
test1\ntest2
带 -e 输出为
test1
test2
关于/r与/n 以及 /r/n 的区别
来源
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
区别
\r就是回到行首,\n就是到下一行的,但是一般我们输出程序时,看不到明显的差别的
‘\r’是回车,’\n’是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。
对于cprintf和sprintf来说,你如果要换行的话,你要输入"\r\n"
而对于printf不说,换行只要"\r"就可以了。
一个是回车,一个是换行
ASCII码一个是10一个是13。
\r\n与\n是有区别的。
如果要通用的则是\r\n,因为有些编辑器它不认\n
echo 中 -c 命令
表示不换行,搭配 -e 使用
# 脚本内容
#!/bin/sh
echo -e "first line! \c" # -e 开启转义 \c 不换行
echo "second line!"
# 输出结果
first line!second line!
# 若没有 -c ,则输出结果为
first line!
second line!
文件检测命令
命令 | 作用 |
---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true |
-p file | 检测文件是否是有名管道,如果是,则返回 true |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true |
-r file | 检测文件是否可读,如果是,则返回 true |
-w file | 检测文件是否可写,如果是,则返回 true |
-x file | 检测文件是否可执行,如果是,则返回 true |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true |
-S | 判断某文件是否 socket。 |
-L | 检测文件是否存在并且是一个符号链接。 |
test 命令
test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
数值与字符检测
参数与前面讲的运算符中关系运算符和字符串运算符一样,只是将表达式中外部的[] 换成了 test而已,如以下例子:
#! /bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
# 输出结果为
两个数相等!
# 执行结果与将 test 换成 [ ] 后一样
num1=100
num2=100
if [ $[num1] -eq $[num2] ]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
# 输出结果为
两个数相等!
文件测试
参数为上一条文件检测命令的参数,直接上例子
#!/bin/bash
if test -e ./notFile -o -e ./bash
then
echo '至少有一个文件存在!'
else
echo '两个文件都不存在'
fi
文件测试中还支持 -o 与 -a 来连接多个表达式。优先级为:!> -a > -o
let 命令
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
a=5
let "a++" # 这里的变量a加不加双引号都可以
echo $a
# 输出为
6
文件包含
简单说就是一个脚本中调用其他脚本,直接上例子:
# 脚本one.sh
#!/bin/bash
one="the is one in file one.sh"
# 脚本two.sh
#!/bin/bash
one="the is two in file two.sh"
# 脚本three.sh
#!/bin/bash
#以下包含文件的两种方法等效,推荐使用source关键字
. one.sh # 文件路径
source two.sh
echo $one
echo $two
# 执行脚本 three.sh,输出为
the is one in file one.sh
this is two in file two.sh
连接FTP
直接上例子
ftp -i -n ${HOST} <<!
user ${user} ${passwd}
lcd ${local_file}
cd ${tar_file}
mput *
quit
!
- -i 在多个文件传输期间关闭交互提示
- 使用 -n 选项连接ftp客户端以阻止ftp客户端立即登录.这样,ftp客户端就不要你输入一个用户名和密码了
- HOST 是要连接的主机号
- user user passwd 输入连接的主机用户名和相应密码
- lcd 表示本地需要传输的文件路径
- cd 表示目标主机需要接收文件的路径
- mput 表示将本地文件路径下的所有文件都传输过去,如果只需要传输一个文件,则使用put命令
- quit 退出本次连接