Linux系统的shell基础

  • shell 在Linux系统管理领域里面是最棒的编程语言
  • 单行注释:除了首行的#号不是注释外,其他所有行内容,只要首个字符是#,那么就表示该行是注释
  • 多行注释:
  • 两种方法::<<!...!和:<<字符...字符
  • 脚本执行的三种方法:
  • 1./bin/bash 脚本名
    1. ./脚本名(需要添加执行权限)
  • 3.source 脚本文件 或 . 脚本文件
  • 脚本规范:
  • 1.脚本命名要有意义,文件后缀名是.sh
  • 2.脚本文件首行必须是解释器#! /bin/bash
  • 3.脚本文件解释器后面要有脚本的基本信息等内容。
  • 4.注释内容尽量不要用中文
  • 5.脚本内容执行是按从上到下,依次执行
  • 6.流程控制语句一次性写完,再添加内容
  • 7.通过缩进让代码易读。
  • 环境变量:提升文件编辑的效率
  • 变量名=变量值
  • 变量名的定义:
  • 自己文件里面用的 字母_字母
  • 系统级别的 大写字母_大写字母
  • 变量类型分为:系统级别,本地级别,bash内置级别
  • 普通变量样式:name=value,name='value',name="value"
  • 变量值内含特殊符号,需要使用单双引号
  • 变量值使用单引号会原封不动的输出
  • 变量值使用双引号先解析变量,再匹配整体
  • 变量输出样式:$name,"$name",${name},"${name}"
  • 命令变量:name=$(cmd),name=cmd
  • 全局环境变量定义:export name=value(一步完成)
  • 删除环境变量:unset name
  • 批量删除环境变量:重启终端会话
  • 作用范围
  • 系统级别 /etc/profile /etc/profile.d/xxx.sh
  • 用户级别 /etc/bashrc ~/.bashrc ~/.bash_profile
  • 终端级别
  • 文件级别
  • 代码级别
  • 系统级别的环境变量作用于多终端多用户
  • 当前父shell中定义变量分为局部变量和全局变量,不同点是:局部变量只能作用于父shell,子shell无法继续使用;如果使用了export将局部变量升级为全局变量,那么子shell创建的时候会继承父shell的全局变量。
  • 普通环境变量:在文件里面,可以被独立的函数来使用,在函数里面可以通过local关键字限定,这个普通的环境变量作用范围仅限于函数里面。
  • 脚本相关的变量解析
  • $0 获取当前执行文件的shell脚本文件名
  • $n 获取当前执行的shell脚本的第n个参数值,当n为0时表示文件名;当n大于9就要用大括号括起来$
  • $# 获取当前shell命令中参数的总个数
  • $? 获取执行上一个指令的返回值(0是成功,1是失败)
  • $$ 是脚本运行的当前进程的ID号,作用是方便以后管理它杀掉进程
  • $! 前一条命令进程的ID号,作用是方便杀掉他
  • 内置变量
  • $0 $# $num $? ${#file} $
  • 表达式
  • 运算符 + - * / %
  • 赋值 = *= /= += -= ++ --
  • 测试 test、 [ 表达式 ]、 0代表表达式成立、1代表表达式失败
  • 逻辑 && 、 ||、!
  • 文件 -f -d -x
  • 数字 -eq -ne -ge -gt -le -lt
  • 字符串 == != -n -z
  • 多条件
  • [ 条件1 -a 条件2 ] [ 条件1 -o 条件2 ]
  • [[ 条件1 && 条件2 ]] [[ 条件1 || 条件2 ]]
  • shell里面的数组就是列表
  • 一维数组,按照顺序将一系列数据排列下来即可。
  • 数组的表现样式:数组[下标] #下标就是索引
  • 使用场景:编程语言中基于数据的查询,聚合等操作
  • 数组的定义:数组名=(a b c d e f );数组名[下标]
  • 数组的查看:${array_name[index]};$
  • 表达式文件属性判断
  • -d 检查文件是否存在且为目录文件
  • -f 检查文件是否存在且为普通文件
  • -x 检查文件是否存在且为可执行权限
  • 数值比较,如大于,小于,等于两者之间的关系
  • n1 -eq n2(相等) n1 -ne n2(不等于) n1 -ge n2(大于等于) n1 -gt n2(大于) n1 -lt n2(小于) n1 -le n2(小于等于)
  • 条件判断
  • 单分支if: if 条件;then 命令;fi
  • 双分支if: if 条件;then 命令;else 命令;fi
  • 多分支if: if 条件;then 命令;elif 条件;then 命令;。。。;else 命令;fi
  • case语句:
  • case 变量名 in
  • “xxx”)
  • 命令;;
  • *)
  • 命令;;
  • esac
posted @ 2026-04-19 21:28  kevin-579  阅读(18)  评论(0)    收藏  举报