2. 创建一个文件,添加内容,并且演示课程命令cat,tail,more等等相关文本处理工具的用法,并且总结到博客,添加详细的注释信息
#创建一个测试文件
touch test.txt
#随机写入文本
root@rocky8:~# cat test.txt
Hello, this is a line of text.
This is another line.
abcdefg
1234567890
#1.CAT
#-e 显示行结束符
root@rocky8:~# cat -e test.txt
Hello, this is a line of text.$
This is another line.$
abcdefg$
1234567890$
#-n 对显示出的每一行进行编号
root@rocky8:~# cat -n test.txt
1 Hello, this is a line of text.
2 This is another line.
3 abcdefg
4 1234567890
#2.tail
#常用选项
#n|--lines=N 指定获取后N行,如果写成+N,表示从第N行开始到文件结束
root@rocky8:~# tail -n2 test.txt
abcdefg
1234567890
#3.more
more [OPTIONS...] FILE...
#常用选项
-d #在底部显示提示
-s #压缩连续空行
#命令选项
#空格键 #翻页
#回车键 #下一行
#!cmd #执行命令
#h #显示帮助
#:f #显示文件名和当前行号
#= #显示行号
3. 总结正则表达式的语法
3.1 基本正则表达式元字符
.
:匹配任意单个字符。^
:匹配输入字符串的开始位置。$
:匹配输入字符串的结束位置。*
:匹配前面的子表达式零次或多次。+
:匹配前面的子表达式一次或多次。?
:匹配前面的子表达式零次或一次。{n}
:匹配确定的n次。{n,}
:至少匹配n次。{n,m}
:最少匹配n次且最多m次。[]
:匹配括号内的任意一个字符。|
:匹配两项之间的任意一项(或)。\
:转义特殊字符或表示特殊序列的开始。\d
:匹配任意数字(等同于[0-9]
)。\D
:匹配任意非数字字符(等同于[^0-9]
)。\w
:匹配任意字母数字字符(等同于[a-zA-Z0-9_]
)。\W
:匹配任意非字母数字字符(等同于[^a-zA-Z0-9_]
)。\s
:匹配任意空白字符(包括空格、制表符、换行符等)。\S
:匹配任意非空白字符。[abc]
:匹配任何一个字符 a、b 或 c。[^abc]
:匹配除了字符 a、b、c 之外的任意字符。[a-z]
:匹配任何一个小写字母。[A-Z]
:匹配任何一个大写字母。[0-9]
:匹配任何一个数字。
4. 文本三剑客相关的总结,grep的用法,sed的语法和awk的语法(还没看到awk)
grep 的用法
基本用法:
grep "pattern" file
:在file
中查找包含pattern
的行。grep -i "pattern" file
:忽略大小写搜索。grep -v "pattern" file
:显示不包含pattern
的行。grep -n "pattern" file
:显示匹配行及行号。grep --color "pattern" file
:将匹配的文本高亮显示。
正则表达式和基本模式:
grep "[a-z]" file
:匹配任何小写字母。grep "^pattern" file
:匹配以pattern
开始的行。grep "pattern$" file
:匹配以pattern
结束的行。
递归搜索:
grep -r "pattern" /path/to/dir/
:递归地在指定目录下搜索包含pattern
的文件。
sed 的语法
基本语法:
sed 's/old/new/g' file
:将file
中的old
替换为new
。sed -i 's/old/new/g' file
:直接修改文件内容。
脚本命令:
a\newline
:在当前行后追加文本。i\newline
:在当前行前插入文本。d
:删除当前行。s
:替换文本。
模式匹配和替换:
sed '/pattern/a\newline' file
:在匹配pattern
的行后追加文本。sed '1,5d' file
:删除文件的第1行到第5行。sed 's/old/new/2' file
:仅替换文件中第二次出现的old
。
5. 总结程序的组成相关知识点
6. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用
1.命名要求 区分大小写 不能使程序中的保留字和内置变量:如:if, for 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
命名习惯 见名知义,用英文单词命名,并体现出实际作用,不要用简写,如:ATM 变量名大写 局部变量小写 函数名小写 大驼峰StudentFirstName,由多个单词组成,且每个单词的首字母是大写,其它小写 小驼峰studentFirstName ,由多个单词组成,第一个单词的首字母小写,后续每个单词的首字母是 大写,其它小写 下划线: student_name
2.变量类型以及使用
1.环境变量: 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程 一般只在系统配置文件中使用,在脚本中较少使用
#声明并赋值
export name=VALUE
declare -x name=VALUE
#或者分两步实现
name=VALUE
export name
#变量引用:
$name
${name}
只读变量:只能声明定义,但后续不能修改和删除,即常量
#声明只读变量:
readonly name
declare -r name
#查看只读变量:
readonly [-p]
declare -r
位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ... 对应第1个、第2个等参数,shift [n]换位置
$0 命令本身,包括路径
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
注意:$@ $* 只在被双引号包起来的时候才会有差异
#清空所有位置变量
set --
退出状态码变量
当我们浏览网页时,有时会看到下图所显示的数字,表示网页的错误信息,我们称为状态码,在shell脚 本中也有相似的技术表示程序执行的相应状态。
#进程执行后,将使用变量 $? 保存状态码的相关数字
#不同的值反应成功或失败,$?取值范例 0-255
$?的值为0 #代表成功
$?的值是1到255 #代表失败
#用户可以在脚本中使用以下命令自定义退出状态码
exit [n]
7. 编写一个脚本猜数字,每次提示用户比目标数字是大还是小,直到猜成功位置
#!/bin/bash
number=$((RANDOM%100+1))
echo "一个1到100之间的数字,猜得到吗?"
for(( ; ; )) do
read -p "请输入你的猜测" guess
if ! [[ "$guess" =~ ^[0-9]+$ ]]; then
echo "请输入一个有效的整数。"
continue
fi
if [ "$guess" -lt "$number" ]; then
echo "太小了,再试试看。"
elif [ "$guess" -gt "$number" ]; then
echo "太大了,再试试看。"
else
echo "恭喜你!你猜对了数字是 $number。"
break
fi
done