shell编程进阶

本文部分内容转载自skywind3000大佬的awesome-cheatsheets,转侵删

文章目录

  • 1.数组
  • 2.函数
  • 3.here文档和here string
    • Here Document
    • Here String
  • 4.[]和[[]]

1.数组

引用下:

array[0]=valA             # 定义数组
array[1]=valB
array[2]=valC
array=([0]=valA [1]=valB [2]=valC)   # 另一种方式
array=(valA valB valC)               # 另一种方式

${array[i]}               # 取得数组中的元素
${#array[@]}              # 取得数组的长度
${#array[i]}              # 取得数组中某个变量的长度

array=($text)             # 按空格分隔 text 成数组,并赋值给变量
IFS="/" array=($text)     # 按斜杆分隔字符串 text 成数组,并赋值给变量
text="${array[*]}"        # 用空格链接数组并赋值给变量
text=$(IFS=/; echo "${array[*]}")  # 用斜杠链接数组并赋值给变量

A=( foo bar "a  b c" 42 ) # 数组定义
B=("${A[@]:1:2}")         # 数组切片:B=( bar "a  b c" )
C=("${A[@]:1}")           # 数组切片:C=( bar "a  b c" 42 )
echo "${B[@]}"            # bar a  b c
echo "${B[1]}"            # a  b c
echo "${C[@]}"            # bar a  b c 42
echo "${C[@]: -2:2}"      # a  b c 42  减号前的空格是必须的

2.函数

# 定义一个新函数
function myfunc() {
    # $1 代表第一个参数,$N 代表第 N 个参数
    # $# 代表参数个数
    # $0 代表被调用者自身的名字
    # $@ 代表所有参数,类型是个数组,想传递所有参数给其他命令用 cmd "$@" 
    # $* 空格链接起来的所有参数,类型是字符串
    {shell commands ...}
}

myfunc                    # 调用函数 myfunc 
myfunc arg1 arg2 arg3     # 带参数的函数调用
myfunc "$@"               # 将所有参数传递给函数
myfunc "${array[@]}"      # 将一个数组当作多个参数传递给函数
shift                     # 参数左移

unset -f myfunc           # 删除函数
declare -f                # 列出函数定义

3.here文档和here string

可以参考文章Shell高级——Here Document、Here String

Here Document

写注释

<<COMMENT
#these code not need now
if [ -e ~/.gdbinit.bak ]; then
	cat ~/.gdbinit.bak >  ~/.gdbinit
elif [ ! -e ~/.gdbinit ]; then
	touch ~/.gdbinit
	touch ~/.gdbinit.bak
else
	#先备份
	cp -n ~/.gdbinit ~/.gdbinit.bak
fi
echo "set auto-load safe-path /" >> ~/.gdbinit
COMMENT

直接输出内容

easycwmp_usage() {
cat << EOF
USAGE: $1 command [parameter] [values]
command:
  get [value|notification|name]
  set [value|notification]
  apply [value|notification|object|service]
  add [object]
  delete [object]
  download
  upload
  factory_reset
  reboot
  inform [parameter|device_id]
  --json-input
EOF
}

直接在shell文档中向文件写内容:

cat > new_script.sh <<EOF
#!/bin/bash
echo "This is a generated script"
EOF
chmod +x new_script.sh

Here String

Here String 是Here Document的一个变种,用法如下:

command <<< string

4.[]和[[]]

参考shell中[ ]与[[ ]]的区别

[ ]是符合POSIX标准的测试语句,兼容性更强,几乎可以运行在所有的Shell解释器中 [[
]]仅可运行在特定的几个Shell解释器中(如Bash等)

不再进行研究

你可能感兴趣的:(Linux,shell,here)