linux系统shell脚本书写

  1. 常用命令:
  2. 其他命令
  3. bash脚本语法:

以bash为例,记录linux系统shell脚本的基本语法和常用命令。

没必要都背下来,实际用到不记得了一般也是在网上搜,但需要大概知道都能做什么,所以记下来。

常用命令:

  • ls:列出目录下的文件和目录

    • ls -l:显示详细信息,包括文件权限、所有者、大小、修改时间等
    • ls -a:显示隐藏文件
    • ls -d:显示目录本身,而不是目录里的文件
    • ls -R:递归显示目录下所有文件和目录
    • ls -lh:以更易读的形式显示文件大小
    • ls -t:按修改时间排序
    • ls -S:按文件大小排序
    • ls -X:按文件类型排序
  • pwd:显示当前目录的路径

  • cd:切换目录

    • cd ..:返回上级目录
    • cd -:返回上次所在目录
    • cd ~:返回用户主目录
    • cd /:切换到根目录
  • mkdir:创建目录

    • mkdir -p:创建多级目录
    • rmdir:删除空目录
  • touch:创建文件

  • rm:删除文件或目录

    • rm -f:强制删除文件或目录
    • rm -r:递归删除目录
    • rm -i:删除前询问用户
    • rm -I:删除前不询问用户
  • mv:移动或重命名文件或目录

    • mv -i:移动或重命名前询问用户
    • mv -I:移动或重命名前不询问用户
  • cp:复制文件或目录

    • cp -r:递归复制目录
  • find:搜索文件或目录

    • find . -name “*.txt”:搜索当前目录下所有.txt文件
    • find / -name “passwd”:搜索系统所有/目录下名为passwd的文件
    • find / -user root:搜索系统所有/目录下所有root用户的文件
    • find / -perm -u=x:搜索系统所有/目录下所有可执行文件
    • find / -size +10M:搜索系统所有/目录下大小大于10M的文件
    • find / -type f -size +10M:搜索系统所有/目录下类型为文件且大小大于10M的文件
    • find / -type d -empty:搜索系统所有/目录下类型为目录且为空的文件夹
  • chmod:修改文件或目录权限

    • chmod 777 file:给file文件添加所有权限(7=rwx,777={u(ser)=7,g(roup)=7,o(ther)=7 })
  • chown:修改文件或目录所有者

    • chown user file:将file文件的所有者修改为user
    • chown user:group file:将file文件的所有者和组修改为user:group
  • chgrp:修改文件或目录组

    • chgrp group file:将file文件修改为group组
  • ln:创建链接

    • ln (无参数)file link:创建硬链接
    • ln -s (..):创建软链接
    • ln -f (..):强制创建链接
  • ps:查看进程信息

    • ps -ef:显示所有进程信息
    • ps -ef | grep “keyword”:搜索进程信息
    • ps -p pid:显示指定进程信息
    • ps -u user:显示指定用户的进程信息
    • ps -eo pid,user,cmd | grep “keyword”:搜索进程信息
  • cat:查看文件内容

    • cat -n:显示行号
    • cat -b:显示不可打印字符
    • cat -T:显示特殊字符
    • cat file1 file2:显示多个文件内容
      more和less:
    • 展示文件内容,more命令一次只能看到一屏的内容,less命令可以翻页查看文件内容。
    • less:类似more命令,但是可以向前向后翻页,空格翻页,回车翻页,q退出。
    • more:类似less命令,但是只能向下翻页。
  • head:显示文件开头内容

    • head -n:显示前n行内容
    • head -c:显示前c字节内容
  • tail:显示文件末尾内容

    • tail -n:显示后n行内容
    • tail -f:实时显示文件末尾内容
  • echo:输出内容到屏幕或文件

    • echo -e:支持转义字符
    • echo -n:不输出换行符
  • grep:搜索文件内容

    • grep -i:忽略大小写
    • grep -v:反向选择
    • grep -n:显示行号
    • grep -c:显示匹配行数
    • grep -A:显示匹配行及后n行
    • grep -B:显示匹配行及前n行
    • grep -C:显示匹配行及上下n行
    • grep -o:显示匹配内容
  • awk:数据分析语言

    • awk ‘{print $1}’:打印第一列内容
    • awk ‘{print $1,$2}’:打印第一、二列内容
    • awk ‘{sum+=$1} END {print sum}’:求和
    • awk ‘{print $1,$2}’ file1 file2:打印多个文件内容
    • awk -F:指定分隔符
    • awk -v:指定变量
    • awk -f:执行外部脚本
    • awk -v OFS=”:” ‘{print $1,$2}’:指定输出分隔符
  • sort:排序文件内容

    • sort -n:按数字排序
    • sort -r:反向排序
    • sort -k:按指定列排序
    • sort -t:指定分隔符
    • sort -u:去除重复行
    • sort -m:合并已排序文件
    • sort -o:输出到文件
  • cut:提取文件内容

    • cut -d:指定分隔符
    • cut -f:指定列
    • cut -c:指定字节
  • uniq:去除重复行

  • wc:统计文件行数、字数、字节数

    • wc -l:显示行数
    • wc -w:显示字数
    • wc -c:显示字节数
  • date:显示当前日期和时间

    • date “+%Y-%m-%d %H:%M:%S”:显示格式化日期和时间
  • cal:显示日历

    • cal 2024:显示2024年日历
    • cal -3:显示上个月、本月、下个月日历
    • cal -s:显示星期几缩写
    • cal -m:显示月份缩写
    • cal -y:显示年份缩写
  • whoami:显示当前用户

  • who:显示当前登录用户信息

    • who -b:显示当前登录用户的位置
    • who -m:显示当前登录用户的电话号码
    • who -u:显示当前登录用户的用户ID
  • groups:显示当前用户组信息

    • groups user:显示指定用户的用户组信息
  • id:显示当前用户信息

    • id user:显示指定用户信息
  • last:显示登录记录

    • last -u:显示指定用户的登录记录
  • uptime:显示系统运行时间

  • hostname:显示主机名

  • uname:显示系统信息

    • uname -a:显示全部信息
    • uname -s:显示操作系统名
    • uname -n:显示主机名
    • uname -r:显示内核版本
    • uname -m:显示硬件平台
  • man:显示命令帮助信息

    • man command:显示command命令的帮助信息
    • man -k keyword:搜索keyword关键字的帮助信息
  • apropos:搜索帮助信息

    • apropos keyword:搜索keyword关键字的帮助信息
  • alias:设置命令别名

    • alias name=’command’:设置name别名为command命令
    • unalias name:删除name别名
  • history:显示历史命令

    • history:显示所有历史命令
    • history -c:清空历史命令
    • !n:执行第n条历史命令
    • !!:执行上一条命令
    • !string:执行最近的以string开头的命令

其他命令

  • top:查看系统资源占用情况

  • df:查看磁盘使用情况

  • du:查看目录或文件大小

  • free:查看系统内存使用情况

  • ifconfig:查看网络接口信息

  • netstat:查看网络连接信息

  • ssh:远程登录

  • scp:远程复制文件

  • ssh-keygen:生成ssh密钥

  • ssh-copy-id:将ssh密钥拷贝到远程主机

  • ssh-agent:管理ssh密钥

  • ssh-add:添加ssh密钥到ssh-agent

  • ssh-keyscan:扫描远程主机的ssh密钥

  • sshpass:通过ssh远程执行命令

  • wget:下载文件

  • curl:下载文件

  • tar:打包和压缩文件

  • gzip:压缩文件

  • bzip2:压缩文件

  • unzip:解压文件

  • zip:压缩文件

  • unrar:解压rar文件

  • rsync:同步文件

  • mount:挂载磁盘

  • umount:卸载磁盘

  • fdisk:管理磁盘分区

  • lsof:查看系统打开的文件

  • kill:杀死进程

  • killall:杀死进程

  • ln:创建链接

bash脚本语法:

  • 注释:#开头的行表示注释
    • 多行注释:/* */
  • 变量:以$开头,如$var表示变量var的值
    • 字符串变量:用双引号括起来的内容,如”$str”
    • 数字变量:用$((…))括起来的内容,如”$((num1+num2))”
    • 数组变量:用${array_name[index]}表示数组元素,如”${array_name[0]}”
    • 环境变量:用$ENV{var}表示环境变量var的值
  • 字符串:用双引号或单引号括起来的内容,如”hello world”或’hello world’
    • 转义字符:\n、\t、\r、\b、\a、\e、\0、\、$、"、'
    • 变量替换:$var或${var},如”$name”或”${name}”
  • 运算符:支持算术运算、关系运算、逻辑运算、字符串运算
    • 算术运算符:+、-、、/、%、*
    • 关系运算符:-eq、-ne、-gt、-lt、-ge、-le
    • 逻辑运算符:!、&&、||
  • 条件语句:if、then、else、fi
    • 多分支条件:if [ $num -eq 1 ] || [ $num -eq 2 ]; then…; fi
    • 双分支条件:if [ $num -eq 1 ]; then…; else…; fi
  • 循环语句:for、while、do、done
    • for循环:for var in item1 item2…; do…; done
    • while循环:while [ condition ]; do…; done
    • until循环:until [ condition ]; do…; done
  • 控制结构:case、esac、select、function
    • case语句:case $var in pattern1) command1;; pattern2) command2;;…; esac
    • select语句:select var in item1 item2…; do…; done
  • 函数:function name(){…}
    • 调用函数:name arg1 arg2…
    • 脚本:#!/bin/bash
    • 脚本参数:$#、$0、$1、$2、…、$@、$*
    • 脚本执行:./script.sh arg1 arg2…
  • 数组:array_name[index]=value
  • 后台运行:&
    • nohup command &:即使退出系统,command仍然在后台运行
  • 管道:|
    管道符|表示将前一个命令的输出作为后一个命令的输入。如ls -l /etc | grep “^-“表示列出/etc目录下以”-“开头的文件信息。
  • 重定向:>、>>、<、<<
    • >:输出重定向,将命令的输出重定向到文件,覆盖原文件内容
    • >>:追加重定向,将命令的输出重定向到文件,追加到原文件内容
    • <:输入重定向,将文件内容作为命令的输入
    • <<:here文档,将后面的内容作为命令的输入,可以跨行
    • 将标准输出重定向:
      • command > file:将命令的输出重定向到文件
      • command >> file:将命令的输出追加到文件
      • command < file:将文件内容作为命令的输入
      • command << delimiter:here文档,将后面的内容作为命令的输入,可以跨行
    • 将标准错误重定向:
      • command 2> file:将命令的错误输出重定向到文件
      • command 2>> file:将命令的错误输出追加到文件
    • 合并重定向:
      • command1 > file 2>&1:将命令的输出和错误输出合并到文件
    • 筛去错误输出:
      • command 2>/dev/null:筛去命令的错误输出
  • 环境变量:$PATH、$HOME、$PWD、$USER、$SHELL、$UID、$PS1、$PS2、$PS3、$PS4
    • $PATH:搜索命令的路径
    • $HOME:用户主目录
    • $PWD:当前工作目录
    • $USER:当前用户
    • $SHELL:当前登录的shell
    • $UID:当前用户ID
    • $PS1:命令提示符,默认是”$”
    • $PS2:第二个命令提示符,默认是”>”
    • $PS3:第三个命令提示符,默认是”#”
    • $PS4:第四个命令提示符,用于调试脚本
  • 退出状态:0表示成功,非0表示失败
    • $?:上个命令的退出状态
    • $!:上个后台命令的进程号
    • 自定义退出状态:exit n,n为0-255之间的整数
    • 判断退出状态:if [ $? -eq 0 ]; then…; else…; fi
    • 取消自定义退出状态:trap “” EXIT
  • 调试:set -x、set -e、bash -x
    • set -x:显示执行的命令
    • set -e:遇到错误立即退出脚本
    • bash -x:显示执行的脚本内容
  • 脚本参数:$#、$0、$1、$2、…、$@、$*
    • $#:传递给脚本的参数个数
    • $0:脚本名
    • $1、$2、…:传递给脚本的第一个参数、第二个参数、…
    • $@:传递给脚本的所有参数,以”$1” “$2”…的形式展开
    • $*:传递给脚本的所有参数,以”$1” “$2”…的形式展开,但是不包括脚本名
  • 定时任务:crontab命令
    • crontab -e:编辑定时任务
    • crontab -l:列出定时任务
    • crontab -r:删除定时任务
  • 日志:logger命令
    • logger “message”:记录日志信息
    • logger -p priority “message”:设置日志级别,priority为emerg、alert、crit、err、warning、notice、info、debug
  • 进程管理:nohup、&、jobs、kill、bg、fg、disown、wait、trap、killall、killpg、wait
    • nohup command:不挂断地运行命令
    • &:将命令放入后台运行
    • jobs:显示当前后台任务
    • kill pid:杀死进程
      • kill -9 pid:强制杀死进程
      • kill -l:列出所有信号名称
    • bg pid:将进程放入后台
      • bg %:将当前任务放入后台
    • fg pid:将后台进程放入前台
      • fg %:将当前任务放入前台
    • disown:将当前工作目录切换到后台
      • disown %:将当前任务的工作目录切换到后台
    # 一个将任务放到后台,记下进程号,等任务完成后再拿到前台的脚本例子
    #!/bin/bash
    
    # 将任务放到后台
    some_command &  # 将your_command替换为实际的命令
    PID=$!          # 记录进程号
    
    echo "任务已放入后台,进程号: $PID"
    
    # 等待后台任务完成
    wait $PID
    
    echo "任务已完成,进程号: $PID"
    
    # 将任务带回前台(如果需要)
    fg %1  # 假设%1是对应的作业号
    
    • wait:等待子进程结束
      • wait -n:等待n秒
      • wait -p:显示进程号
      • 用法举例:
        #!/bin/bash
        # 后台运行sleep
        - sleep 10 &
        # 等待后台sleep结束
        - wait
        # sleep结束后输出done
        - echo "done"
        
    • trap command signal:设置信号处理命令
    • killall command:杀死所有command进程
    • killpg pid:杀死进程组
    • 你不是杀手,你不要一直杀杀杀。

此方悬停
相册 小说 Ai
/*音乐播放器插件*/ /*
*/