Shell学习11:Shell小记

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 退出本次连接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值