shell | 青训营笔记

71 阅读2分钟

Shell变量

分类

类型作用域声明方式规范
自定义变量当前shell=字符串、整型、浮点型、日期型
环境变量当前shell及其子shellexport、declare -x
系统环境变量所有shell启动加载

2023-04-17_20-42.png

定义

自定义变量

  1. 变量名=变量值

    your_name="runoob.com"
    

    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线 _
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

image.png

环境变量

image-20230417204642227.png

系统环境变量

image1.png

运算符

image2

管道

语法: cmd1 | cmd2

作用:将前一个命令的结果传递给后面的命令

要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理。

注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipefail设置shell遇到管道错误退出

判断命令

概述

用于整数、字符串、文件测试

test

语法:test condition

#!/bin/bash# 整数测试
tset $n1 -eq $n2 #等于
tset $n1 -lt $n2 #小于
tset $n1 -gt $n2 #大于# 字符串测试
test -z $str_a #为空
test -n $str_a #非空
test $str_a = $str_b# 文件测试
test -e /dmt && echo "exist" #是否存在
test -f /usr/bin/npm && echo "file exist" #是否存在且是普通文件

[

语法:[ condition ]

注意:

  1. <、>、=只能用来比较字符串
  2. 中括号内的变量,最好使用引号括起来

[[

语法:[[ condition ]]

注意:[[在整型中支持<、>、=,在字符串中比较支持=~正则

分支语句

if

#! /usr/bin/env bashread -p "请输入一个整数:" n
if [[ $n < 3 ]]; then
    echo "$n < 3."
elif [[ $n < 5 ]]; then
    echo "3 <= $n < 5."
else 
    echo "$n >= 5"
fi
复制代码

case

#! /usr/bin/env bashread -p "请输入一个整数:" n
case $n in :
    1)
        echo "One"
        ;;
    2)
        echo "Two"
        ;;
    3)
        echo "Three"
        ;;
    *)
        echo "Error"
        ;;
esac

循环语句

while

语法:

while condition ;
do 
    程序段
done

until

条件成立跳出循环

语法:

until condition ;
do 
    程序段
done

for

两种写法

  1. for var in [words...]
    do
        程序段
    done
    
  2. for((i=0;i<10;i++))
    do
        程序段
    done
    

函数

语法:

  1. funcName(){ echo "abc"; }
  2. function funcName(){ echo "abc"; }

注意:

  1. shell自上而下运行,函数必须在使用前定义
  2. $()代表函数名,后续参数通过$1$2...
  3. return不结束函数、之代码函数的执行状态
  4. 返回结果一般使用echoprintf,在函数外部使用$()、``获取结果
  5. 如果没有return,函数状态为上一条命令的状态,存储在$?
  6. 建议函数内定义变量用local修饰,表示仅在当前作用域内有效;或者当函数结束时使用unset撤销变量

模块化

在当前shell内执行函数文件

语法:source [函数库的路径]

本文若有不足之处,欢迎纠正