shell基础知识

shell基础知识

首先查看当前服务器支持的shell类型cat /etc/shells

img

基本符号

'|'管道符号

'|', 管道符号,通常用于进程间通信

ls | grep a

'$@'参数

$@代表所有的参数

export DEBUG=true
DEBUG()
{
    if [ "DEBUG" == "true" ]
    then
        $@
    fi
}

'&&'逻辑与符号

'&&'逻辑与符号使用时,前一个命令才会执行成功后,才会执下一条命令

ls && grep -v a /etc/shells

'&'后台执行符号

'&'符号用于将命令放到后台执行,允许在后台运行一个命令,不会阻塞当前shell

ls &  # 在后台运行 sleep 命令

'-'dash符号

'-'后直接加字符,代表选项

if [ -d text ]; then
    echo "name"
fi
-d # 文件是否存在,且为目录
-n # 代表是否是非空串
-z # 代表是否是空串
-a # 文件是否存在
-b # 文件是否存在,且为块文件
-c # 文件是否为存在,且为字符文件

'{}'大括号符号

{ echo "Hello"; echo "World"; } > text # 将多个命令组合为一个命令执行
for i in {1..5}; do
    echo "name"
done

'' 连接符号

\ # 防止命令跨行,导致不可用
docker run -itd \
--name st \ 
--network host

''符号

'' # 单引号定义的字符串,都做为字面量处理,字符串内内容不会被解释或展开

算术运算

n1=5
n2=6
n3=$(($n1+$n2)) # 此时返回11,第一个括号会返会5+6,首先发生变量替换,之后第二层括号对其运算并返回
n3=$n1+$n2 # 返回的是5+6
n3=($n1+$n2) # 返回的是5+6
n3=$($n1+$n2) # 此时会显示5+6命令不存在

参数扩展

条件扩展

name=${var:-default} # 如果var为空,则使用默认值,非空为原值,此时=可以替换-
name=${var:-8} # 空,返回8

name=${var:+default} # 空则,返回空字符串;非空,则返回默认值
name=${var:+8} # 非空,返回8

name=${var:?error} # var未设置或为空时,打印error,并退出脚本

替换操作

file="/path/to/example.txt"
echo "${file/\/path\//name}"  # 替换"/path/" 为name
echo "${file//\//}"       # 替换所有 "/" 为空, “//”为bash参数替换,表示全部替换
echo "${file##*/}"        # 提取文件名, ##表示从开头最长的匹配,*匹配任意字符,直到/
#此时为example.txt,为文件名
echo "${file%.*}"         # 提取文件路径和基本文件名, %从末尾开始匹配,删除.之后的所有字符
# 此时为/path/to/example.txt

数组操作

array=(123 456, 789, 902,312) # 数组默认使用空格作为分隔符
${array[index]} # 访问单个元素
echo "${array[3]}" # 输出902,312
${array[@]:offset:length} # 提取子数组
echo "${array[@]:0:3}" # 输出为123 456, 789,
${#parameter} # 获取长度
echo "${#array}" # 输出3,获取的是第一个元素的长度
echo "${#array[3]}" # 此时获取到的长度为7
echo "${#array}" # 输出4,数组长度,#表示获取数组长度,[@]表示所有元素, 此时数组长度为4,原因是902,312被视为一个单词
echo "${array[@]}" # 输出为123 456, 789, 902,312,@可以与*互换
echo "${array}" # 输出123

删除子字符串

${parameter#word}         # 删除开头的最短匹配
${parameter##word}        # 删除开头的最长匹配
${parameter%word}         # 删除结尾的最短匹配
${parameter%%word}        # 删除结尾的最长匹配
posted @ 2025-02-15 00:18  LemHou  阅读(14)  评论(0)    收藏  举报