Shell脚本简记
星期三, 9月 11, 2024 | 2分钟阅读 | 更新于 星期三, 9月 11, 2024
Linux Shell脚本的常见方法
计算行数
1、常见的wc -l
tail
1、常用tail -Nf来追踪N行数据 2、tail -n N来显示N行数据
删除换行符
1、tr命令
tr '\n' ' '
2、xargs echo -n 3、sed,最难的一个
awk的相关知识
1、$0 它代表了输入进来的所有记录,一般可以表示当前的行 2、 NR 行号 获取文件内当前行为空的行号
#!/bin/bash
awk '{if($0 == "") {print NR}}' ./nowcoder.txt
3、 NF 表示当前行的字段数(即非空字段的数量)。因此,awk NF
的含义是只处理非空行,即只处理有字段的行。这个条件通常用于过滤掉空行或只包含空格的行,以便更精确地处理文本数据。
去除掉空行
#!/bin/bash
cat nowcoder.txt | awk NF
4、awk可以嵌套if等语句处理复杂问题 查找文件中长度小于等于八的单词
#!/bin/bash
cat nowcoder.txt | awk '{
for(i=1;i<=NF;i++){
if(length($i) < 8)
print $i
}
}'
grep命令
1、grep可以使用-v来忽略匹配的行 如忽略文件中包括this的行,输出其他行
#!/bin/bash
cat nowcoder.txt | grep -v "this"
2、grep -n 显示匹配的行 3、grep -e 可以提取同时满足的条件
grep -e 'name' -e 'hello' 文件名 #查找同时有name和hello的行
一些注意点
$()代表命令转换,它里面的命令会被执行
now=$(echo "$sum / $len" | bc -l)
当涉及括号时,Bash 脚本中常见的用法包括:
-
小括号
()
:- 在子 shell 中执行命令:
(command)
会在一个子 shell 中执行command
命令。 - 在算术表达式中使用:
$((expression))
可以计算整数表达式的值。
- 在子 shell 中执行命令:
-
中括号
[]
:- 用于条件测试:在条件测试语句(如 if、while 等)中使用,比如
[ "$var" = "value" ]
来检查变量是否等于某个值。注意,中括号内部要留有空格。
- 用于条件测试:在条件测试语句(如 if、while 等)中使用,比如
-
大括号
{}
:- 用于构建代码块或者文件名扩展(通配符):比如可以使用大括号来构建一系列类似的文件名,例如
file{1..5}.txt
可以展开为file1.txt file2.txt file3.txt file4.txt file5.txt
。 - 在变量替换时使用:
$var_name{pattern}
可以进行字符串模式匹配替换。
- 用于构建代码块或者文件名扩展(通配符):比如可以使用大括号来构建一系列类似的文件名,例如
free
free用来查询可用空间 free -h方便读取 其中的buff表示内存和硬盘之间的缓冲区 swap:当内存不够用,可以使用硬盘划分的一段交换空间
查看文件
1、cat:最常用的工具 2、more:遇到大文件还可以,但无法回翻 3、less:处理more做不到的 4、tail:最常用查日志工具,-f可以动态查日志,-100查看100行同理tail -n查看n行
定时任务
crontab crontab -l查看任务,crontab -e修改任务 格式:分 时 日 月 周 40 20 1 2 * 脚本路径 每隔3小时执行一次
* */3 * * * 脚本路径
查找
find常用参数是 -name,-size,-ctime(修改的时间),-user,-perm find -name ’m*‘通配符记得引号 find -size +100k查找大于100k的 find -size -100k小于100k的 find -ctime +10 十天之前的文件
权限
r 4 w 2 x 1 rwx 7 rw 6
Sed 命令
以下是一些常见的 sed
命令选项及其含义:
-n
:禁止自动打印模式空间的内容,只有经过显式命令后才会输出。-e script
:允许在命令行上指定sed
脚本,可以同时执行多个编辑命令。-f script-file
:从指定文件中读取sed
脚本。-i[SUFFIX]
:直接修改文件内容,如果指定了 SUFFIX,则会备份原始文件,并将修改后的内容保存在原文件中。-r
:启用扩展正则表达式(ERE),使得sed
中的正则表达式支持更多功能。-s
:处理每个文件时,将其视为独立的流,而不是一个整体。 1、sed是按照行号来提取 获取第一行和最后一行
sed -n '1p;$p' filename
分号表示不连续的行,逗号则表示连续 获取1到5行
sed -n '1,5p' filename
2、sed替换的语法
sed 's/要被取代的字串/新的字串/g'
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!
Top
- PID:进程的标识符。
- USER:运行进程的用户名。
- PR(优先级):进程的优先级。
- NI(Nice值):进程的优先级调整值。
- VIRT(虚拟内存):进程使用的虚拟内存大小。
- RES(常驻内存):进程实际使用的物理内存大小。
- SHR(共享内存):进程共享的内存大小。
- %CPU:进程占用 CPU 的使用率。
- %MEM:进程占用内存的使用率。
- TIME+:进程的累计 CPU 时间。
系统相关信息
1、获取信息:uname -a可以获得系统的所有信息。 2、获取启动时间:uptime,top 3、获取存储情况(磁盘):df -h方便阅读,-i可以获取inode数量 4、查看文件夹情况:du -h方便阅读,-s显示大小 5、查看文件内具体文件和文件夹:ls -h方便阅读,-l显示文件的具体信息,-t以时间排序,最新的在最上面,-r反转排序
用户管理
1、添加用户:useradd -g可以指定用户组
useradd –d /home/sam -m sam #分配了sam的同时一个地址作为home
2、删除用户: userdel 最常用的是 -r,可以同时删除用户的目录
userdel -r sam
3、修改用户: usermod
usermod -s /bin/ksh -d /home/z –g developer sam
此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。 4、密码管理: passwd 可使用的选项:
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。 5、创建用户组: groupadd 常用 -g指定一个gid
groupadd -g 101 group2
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。 6、删除用户组: groupdel 7、修改用户组: groupmod
- -g GID 为用户组指定新的组标识号。
- -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
- -n新用户组 将用户组的名字改为新名字
Kill
1、最常用的信号是:
SIGKILL
(信号9):立即结束进程,不能被捕获或忽略。SIGTERM
(信号15):正常结束进程,可以被捕获或忽略。SIGSTOP
(信号19):暂停进程,不能被捕获、忽略或结束。SIGCONT
(信号18):继续执行被暂停的进程。SIGINT
(信号2):通常是Ctrl+C产生的信号,可以被进程捕获或忽略。
shell判断是否相等
1、-eq
和 =
在 shell 脚本中是不同的。
-eq
用于数值比较,例如:if [ $a -eq $b ] then echo "$a 等于 $b" fi
=
用于字符串比较,例如:if [ "$str1" = "$str2" ] then echo "两个字符串相等" fi
因此,在 shell 脚本中,`-eq` 和 `=` 分别用于数值和字符串的比较。要根据需要选择正确的运算符进行比较。
2、大于是`gt`,小于是`lt`,大于等于是`ge`,小于等于是`le`