Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Readme.md

shell 语法

基本语法

  • 类型
    • 字符串
      • 单引号
        • 单引号里的任何字符都会原样输出, 单引号字符串中的变量是无效的
      • 双引号
        • 双引号字符串内可以有变量
        • 双引号里可以出现转义字符
    • 数字
  • 变量:
    • 定义变量时,等号两边不能留有空格;
    • 语句给变量赋值:etc=$(ls /etc)
    • 变量可以多次赋值
    • 只读变量:etc=$(ls /etc) \n readonly etc
    • 删除变量:unset etc
    • 变量类型:
      • 局部变量
      • 环境变量
      • shell变量
    • 内置变量:
      • $n: n为数字
        • ./test.sh 1 2 3
        • $0: 为执行的文件名: test.sh
        • $1 $2, 分别为执行脚本时传递的第1、2个变量: 1,2
      • $# : 传递的数量
      • $* : 所有参数,如”$*"「"」括起来的情况时所有参数会形成一个字符串。
      • $@ : 与 $*作用相同,用双引号时,会返回数组形式
        • $*与$@ 区别:
          • 都是所有参数
          • ./test.sh 1 2 3,”$*”等价与"1 2 3”[一个参数]"@" 等价于 "1" "2" “3”[三个参数],在for循环时有不同表现。
      • $$ : 脚本运行的当前进程ID号
      • $? : 显示最后命令的退出状态。0表示没有错,其他值则表示出错。
  • 数组
    • 只支持一维数组,从0开始索引
    • 括号表示数组,用空格分开:数组名=(值1 值2 ... 值n)
    • 数组索引:valuen=${array_name[n]}, 0开始;
    • 用 @ 符号可以获取数组中的所有元素:echo ${array_name[@]}
    • 数组元素个数:length=${#array_name[@]}或者length=${#array_name[*]}
    • 数组元素长度: lenght=${#array_name[n]}
    • 关联数组:
      • 类似Python中的字典类型,有key有value
      • 自定义: declare -A array_site=([“google”]=“www.google.com” [“baidu”]=“www.baidu.com")
      • 先声明在定义:declare -A array_site … array_site[“google”]=“www.google.com”
      • 同样可以索引,取长度, 取value${array_name[@]},取键值${!site[*]}
  • 字符串
    • 单引号
    • 双引号
  • 自定义函数
    • 两种方式:大括号{ } 两边必需有空格隔开。
    • 先定义在使用
    • 单行模式时,在最后的一个命令一定要加分号“;”
    • 变量:默认是全局变量,函数内部变量要加local
    • 函数返回值:0-255
      • Bash 函数没有返回值功能,当一个bash函数执行完之后,返回最后一条命令执行的状态
      • 最后一条命令执行成功,则返回0;不成功则返回1-255的数字
      • 也可以用return返回特定的1-255的数字
      • 函数返回值的值,用$?变量获取
      • 返回字符串:
        • 入股需要返回字符串,则需要将返回值通过echo输出出来
    • 传参给到函数、shell脚本
      • 位置参数: $0 $1 $2… $n ;$0是函数名称或者脚本名称
      • $# 参数个数
      • $* $@所有参数
        • 不加引号时,两者意思相同
        • $添加双引号:“$” :会将所有参数展开为一个字符串,并按空格分开,如“$1 $2 $3”
        • $@添加双引号:“$@”: 会将所有参数展开为字符串数组,如”$1” “$2” “$3”..
    • 内置函数
      • 字符串长度: echo ${#string}
      • 字符串切片:echo ${string:1:4} 从字符串第 1 个字符开始截取 4 个字符(索引从0开始)
      • 字符串查找: echo expr index “$string” io ## i 或 o 的位置(哪个字母先出现就计算哪个)
set -e    # 如果脚本执行过程,有遇到命令出错的代码,则触发中断,不会往下执行。

var1=‘a'
var2=‘b'
Myfunc (){
    Local var1=‘c’    # 局部变量
    var2=‘d’  # 此处会修改全局定义的var2值
    Command
}
# 单行模式:
Myfunc() { command; }

# 带function的函数
function myfunc {
    Command;
    return 33
}
function myfunc2 { command; }

myfunc
echo $? # 输出返回的33
myfunc2 
echo $? # 如果myfunc2最后一条指令出错,$?则不为0

my_function () {
  local func_result="some result"
  echo "$func_result"
}
func_result="$(my_function)”    # 此处会将函数的echo值,通过$()赋值给到func_result变量
echo $func_result