NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • Linux

    • CentOS

    • Ubuntu

    • 环境安装

    • 常用命令

    • 常用软件

    • 最佳实践

    • 通用

      • 磁盘管理与文件系统
      • Oh My ZSH
      • 开启BBR
      • Shell笔记
        • 第一行
        • 执行
        • 注释
        • 变量
          • 定义 - 普通
          • 定义 - 只读
          • 类型
          • 赋值
          • 使用
          • 删除
        • 字符串操作
          • 定义
          • 拼接
          • 长度
          • 子串
          • 查找
        • 数组操作
          • 定义
          • 读取
          • 长度
        • 流程控制
          • if else
          • if
          • if else
          • if else-if else
          • 判断语句
          • for
          • while
          • case (switch)
          • 跳出循环
        • 函数
  • Docker

  • 云原生

  • Kubernetes

  • KubeSphere

  • K3S

  • 笔记

  • PVE

  • 维修

  • DevOps

  • 云服务

  • 路由器

  • Hyper-V

  • Windows

  • macOS

  • 运维
  • Linux
  • 通用
NipGeihou
2024-11-07
目录

Shell笔记

# 第一行

#!/bin/bash
echo "Hello World !"

#!  是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

# 执行

# 方式1:作为可执行程序
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

# 方式2:作为解释器参数
/bin/sh test.sh

# 注释

单行注释

# 这样

多行注释

# 开头 :<<标识
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
# 结束 标识

# 标识不一定是EOF,也其他,如COMMENT
: <<'COMMENT'  
这是注释的部分。  
可以有多行内容。  
COMMENT

# 最简洁的写法 : + 空格 + 单引号
: '
这是注释的部分。
可以有多行内容。
'

# 变量

# 定义 - 普通

RUNOOB="www.runoob.com"
LD_LIBRARY_PATH="/bin/"
_var="123"
var2="abc"

规范:

  • 只包含字母、数字和下划线
  • 不能以数字开头
  • 常量使用大写
  • 避免使用特殊符号

# 定义 - 只读

myUrl="https://www.google.com"  
readonly myUrl  
myUrl="https://www.runoob.com" # 报错:/bin/sh: NAME: This variable is read only.

# 类型

# 字符串
my_string='Hello, World!'
my_string="Hello, World!"

# 整型
declare -i my_integer=42

# 数组
my_array=(1 2 3 4 5)

# 关联数组
declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30

# 环境变量
echo $PATH

# 特殊变量
$0 # 表示脚本的名称
$1, $2 # 表示脚本的参数。
$# # 表示传递给脚本的参数数量
$? # 表示上一个命令的退出状态等

# 赋值

# 正确的赋值
variable_name=value

# 不要加空格,有可能会导致错误
variable_name = value

# 语句赋值
for file in `ls /etc`
# 或
for file in $(ls /etc)

# 可重复赋值
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

# 使用

在变量名前面加美元符号 $

your_name="qinjx"
echo $your_name
echo ${your_name}

# 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
for skill in Ada Coffe Action Java; do  
    echo "I am good at ${skill}Script"  
done

# 删除

unset variable_name

# 字符串操作

# 定义

# 单引号
str='this is a string'

# 双引号
your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
变量 转义字符
单引号 × ×
双引号 √ √

# 拼接

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1 # hello, runoob ! hello, runoob !

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3 # hello, runoob ! hello, ${your_name} !
Tip

如出现类似提示: line 5: echo hello,: command not found ,说明粘贴的代码 echo 行的空格有问题,删除空格重新输入。

# 长度

变量前加 #

string="abcd"
echo ${#string}   # 输出 4

# 子串

从字符串索引 1 开始截取 4 个字符:

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

# 查找

查找字符 i 或 o 的位置 (哪个字母先出现就计算哪个):

string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

注意: 以上脚本中是反引号,而不是单引号

# 数组操作

bash 支持只一维数组(不支持多维数组),并且没有限定数组的大小。

# 定义

# 数组名=(值1 值2 ... 值n)

array_name=(value0 value1 value2 value3)

array_name=(
value0
value1
value2
value3
)

# 单独定义
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

# 读取

# ${数组名[下标]}
valuen=${array_name[n]}

# @ 获取数组中的所有元素
echo ${array_name[@]}

# 长度

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}

# 取得数组单个元素的长度
length=${#array_name[n]}

# 流程控制

Title

结构体不能为空

# if else

# if

if condition
then
    command1 
    command2
    ...
    commandN 
fi # 末尾的 fi 就是 if 倒过来拼写

单行写法:

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

# if else

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

# if else-if else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

# 判断语句

[...] 判断语句中大于使用 -gt,小于使用 -lt。

if [ "$a" -gt "$b" ]; then
    ...
fi

((...)) 作为判断语句,大于和小于可以直接使用 > 和 <

if (( a > b )); then
    ...
fi

# for

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

# 常见条件
for ((i = 0; i < gpu_count; i++)) # 次数遍历
for str in This is a string # 元素遍历

单行写法:

for var in item1 item2 ... itemN; do command1; command2… done;

# while

while condition
do
    command
done
#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

# case (switch)

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
*) echo '相当于default' ;;
esac

# 跳出循环

与其他语言的关键字( break 、 continue )一样,作用也一样。

# 函数

[ function ] funname [()]
{

    action;

    [return int;]

}

示例:

# 无返回函数
demoFun(){  
    echo "这是我的第一个 shell 函数!"  
}  
echo "-----函数开始执行-----"  
demoFun  
echo "-----函数执行完毕-----"

# 有返回
funWithReturn(){  
    echo "这个函数会对输入的两个数字进行相加运算..."  
    echo "输入第一个数字: "  
    read aNum  
    echo "输入第二个数字: "  
    read anotherNum  
    echo "两个数字分别为 $aNum 和 $anotherNum !"  
    return $(($aNum+$anotherNum))  
}  
funWithReturn  
echo "输入的两个数字之和为 $? !" # 函数返回值在调用该函数后通过 $? 来获得

# 传参
funWithParam(){  
    echo "第一个参数为 $1 !"  
    echo "第二个参数为 $2 !"  
    echo "第十个参数为 $10 !"  
    echo "第十个参数为 ${10} !"  
    echo "第十一个参数为 ${11} !"  
    echo "参数总数有 $# 个!"  
    echo "作为一个字符串输出所有参数 $* !"  
}  
funWithParam 1 2 3 4 5 6 7 8 9 34 73
上次更新: 2024/11/16, 16:33:39
开启BBR
基本命令

← 开启BBR 基本命令→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式