第四章 shell程序设计
-
read命令与-p -t参数的使用
-p prompt 设定提示信息;-t timeout 超时时间限制 -
select var in str1 str2 … :用户从str1,str2…中选择一个键盘输入到var变量中,常用来实现选择菜单。
-
{ } 花括号的强制整体标识
例:[ $1 ='-n' ] && { echo "hello" ls }
当前一个条件为真时,后面才会输出hello并打印文件列表;若没有花括号,则一定会打印文件列表 -
引号----取消转义符号的作用
双引号—取消通配符与分隔符的转义,但保留变量引用的能力(find中用双引号+通配符,是因为-name,代表着文件名,理解为 * 仍有效*)
单引号----全部取消
直接在shell输入aaa bbb会被默认为两个字符串;“aaa bbb”则被认为是一个字符串 -
find 命令(以目录为查找基础)与rm命令的连用
rm { }:固定搭配,删除前面找到的文件,原因未知
-
shell脚本对空格有严格的规定,赋值语句等号两边不能有空格,而字符串比较,等号两边必须有空格—倘若对空格把握不好,尽量留空格
赋值时: i=1 // =用作赋值时,两边绝对不能有空格
比较时: if [ $a = $b ] // =用作比较判断时,等号两边必须有空格
整数比较:if [ a -xx b ] //中括号前后一定要加空格否则会报错变量的引用是用 符 号 加 上 变 量 名 符号加上变量名 符号加上变量名x或者${x},变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,建议给所有变量加上花括号,这是个好习惯,既便于阅读,又不易出错
-
. 与 ./ 的意义是一样的,都代表当前目录,在find与ls中都可使用—相当于在当前pwd的目录下列出文件列表。
-
linux修改文件名及后缀–linux不以文件后缀来区分文件类型,所以我们可以自己修改
mv a.txt b.sh
- expr在进行数值运算时,需要注意各字符间的空格:
echo `expr $i + 1`---echo $(expr $i + 1)
而$[]不需要空格–但 $ []计算功能在脚本中无法使用(原因是我在执行脚本时使用的是sh命令,sh编辑器中没有 $ []功能,使用 bash tst1.sh 1 2 3即可解决问题)
- ${}—变量引用 ,这样用观察更清晰,{}界定变量范围,如 $ {A}B与 $ AB; 子串截取
- [ ] − − 等 价 于 []--等价于 []−−等价于(())–数值计算—因为它不是命令,所以需要与echo连用才可输出
- $()----命令替换—但不是所有shell编辑器都兼容,比反撇号更清晰
- let命令
用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
这种有分号是错误的,let要想执行多个表达式,则必须在同一行且以空格分隔 - cp复制命令
- 目录到目录:
如果dir2目录不存在,则可以直接使用cp -r dir1 dir2
即可。
如果dir2目录已存在,则需要使用cp -r dir1/. dir2
如果这时使用cp -r dir1 dir2
,则也会将dir1目录复制到dir2中,明显不符合要求。 - 文件–已有目录:
cp a.c dir1
;文件到新目录:mkdir dir2;cp a.c dir2
- 文件到文件:
cp a.c b.c
- -r:对目录递归复制
- 目录到目录:
- 文件备份shell命令编写—这里在编写时花费了大量时间,对字符串相关操作完全不熟,以后需要深入研究练习
#!/bin/bash
ctime=`stat $* | grep "最近改动"`
#获取最近改动的时刻
ctime=${ctime:5:19}
echo $ctime
#${}的截取子串用法
name=$*
#变量的直接连接很简单------
name=${name%.*}_
#${}的替换用法
ctime=${ctime/ /-}
cp $* /home/new_top/_backup/$name$ctime
- #注释只能从一行开头注释
stat filename
查看文件各种属性- 对变量的字符串截取与替换-----${ }—详情见博客:https://blog.csdn.net/weixin_44244371/article/details/103539800
- 在截取时,汉字也是一个字节 ;
- 命名文件时不能直接用空格,需要用转义字符"/"
- cp命令文件到已有目录并重命名的方法掌握
- 还需深入学习的问题及知识
- 变量与文件字符串截取练习题以及cut ,sed,awk,${ }命令的使用
- 二进制转化为十进制数的shell命令编写—见书p73
未完待续…191214