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 脚本中常见的用法包括:

  1. 小括号 ()

    • 在子 shell 中执行命令:(command) 会在一个子 shell 中执行 command 命令。
    • 在算术表达式中使用:$((expression)) 可以计算整数表达式的值。
  2. 中括号 []

    • 用于条件测试:在条件测试语句(如 if、while 等)中使用,比如 [ "$var" = "value" ] 来检查变量是否等于某个值。注意,中括号内部要留有空格。
  3. 大括号 {}

    • 用于构建代码块或者文件名扩展(通配符):比如可以使用大括号来构建一系列类似的文件名,例如 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`

© 2024 - 2025 Aiser's Blog

欢迎来到我的博客!

Me

我的名字是Aiser,这是我的博客