Linux Shell 知识点杂记(待更..)

exit 0:正常运行程序并退出程序;
exit 1:非正常运行导致退出程序;

命令颜色

\e[*m...\e[0;0m 或 \e[*m...\e[0m

#!/bin/bash
echo -e "\e[93mHello World!\e[0m"
echo -e "\e[93mHello World!\e[0:0m"

运行shell脚本

运行shell脚本的两种方法

1. 用./脚本名称    如:  ./test.sh
2. 用source命令  如: source test.sh

两种方法的区别:
1. 脚本文件的权限要求不同,用source命令脚本文件没有执行权限也可以运行
2. 脚本中定义变量的使用范围不同;
source会直接在当前的进程中读取脚本的配置,不会开一个新的进程, 所以source之后,里面配置的变量都会加入到当前环境中,可以在该shell中调用脚本中的变量; source命令通常可以用于保留当前shell中的环境变量

$符号的用法

1. 获得变量的值: ${HOME}, $HOME
2. 获得脚本参数:

  • $0: shell脚本文件名
  • $1: 传给shell脚本的第一个参数
  • $@: 传给脚本的所有参数列表, 但是使用时加引号会返回每个参数。
  • $#: 传给脚本的参数个数
  • $*: 所有脚本参数的内容
  • $$: 脚本运行的当前进程号
  • $!: 后台运行的最后一个进程的ID
  • $?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

3. 命令替换: $(ls) 或 'ls' 

变量操作

  • 创建普通变量: name="test" (=两边不可有空格)
  • 创建只可函数体中使用的局部变量: local name="test" (使用local修饰的变量在函数体外无法访问,并且local只能在函数体内使用)
  • 使用变量: echo $name 或者 echo ${name} (推荐使用大括号版)
  • 变量重新赋值: name="new_test" (将原值覆盖)
  • 只读变量: name="only_read" -> readonly name (使用readonly标识后的变量,不可被修改)
  • 删除变量: unset name; (删除之后不可访问,删除不掉只读变量)

BASH_SOURCE

BASH_SOURCE[0]等价于BASH_SOURCE ,取得当前执行的 shell 文件所在的路径及文件名
dirname 去除文件名中的非目录部分,仅显示与目录有关的部分

#当前执行脚本的所在目录
source=$( cd $(dirname ${BASH_SOURCE[0]}); pwd )

cd -P 调到实际路径而非快捷方式路径
readlink 获取一个软链接指向的目的路径

declare 变量声明或显示

选项    说明
-f    显示所有自定义函数,包括名称和函数体
-F    显示所有自定义函数名称
-g    在 Shell 函数内部创建全局变量
-p    显示指定变量的属性和值,当使用此选项时,其他的选项将被忽略
-a    声明数组变量
-A    声明变量为关联数组(支持索引下标为字符串)
-i    声明整数型变量。这样变量后面就可以跟着算术表达式,表达式的结果只能是整数。如果表达式求值失败或者不是整数,就设置为 0
-l    给变量赋值时转为小写
-u    给变量赋值时转为大写
-n    使变量 var 成为指向一个以其值为名称的变量的引用
-r    将变量 var 声明为只读变量。只读变量不允许修改,也不允许删除。等价于 readonly name
-t    使变量 var 带有 trace(追踪)属性
-x    将变量 var 导出,作用与 export 一样,将变量 var 设置成环境变量,这样在随后的脚本和程序中可以使用。等价于 export name

 输入输出重定向(> <)

输出重定向:

命令介绍
command >filename把标准输出重定向到新文件中
command 1>filename同上
command >>filename把标准输出追加到文件中
command 1>>filename同上
command 2>filename把标准错误重定向到新文件中
command 2>>filename把标准错误追加到新文件中

 输入重定向:

命令介绍
command <filename以filename文件作为标准输入
command 0<filename同上
command <<delimiter从标准输入中读入,直到遇到delimiter分隔符

 字符串操作(长度,删除,替换)

表达式

含义

${#string}

$string的长度

${string:position}

在$string中, 从位置$position开始提取子串

${string:position:length}

在$string中, 从位置$position开始提取长度为$length的子串

${string#substring}

从变量$string的开头,删除最短匹配$substring的子串

${string##substring}

从变量$string的开头,删除最长匹配$substring的子串

${string%substring}

从变量$string的结尾,删除最短匹配$substring的子串

${string%%substring}

从变量$string的结尾,删除最长匹配$substring的子串

${string/substring/replacement}

使用$replacement, 来代替第一个匹配的$substring

${string//substring/replacement}

使用$replacement, 代替所有匹配的$substring

${string/#substring/replacement}

如果$string的前缀匹配$substring,那么就用$replacement来代替匹配到的$substring

${string/%substring/replacement}

如果$string的后缀匹配$substring,那么就用$replacement来代替匹配到的$substring

例:

INFO(){
    echo -e "\e[92m=>\e[0;0m ${1}"
}

# ini文件解析
ini_parser(){ 
    IFS=$'\n' && local ini=( $(<$1) )           # $1为传入的参数文件名,输入文件
    INFO "原文件""${ini[*]}"
    ini=( ${ini[*]//;*/} )                      # 匹配到;时,把这一行后面的内容都用空代替
    ini=( ${ini[*]/#[/\}$'\n'ini_section_} )    # 前缀匹配到[时,
    ini=( ${ini[*]/%]/ \(} )                    # 后缀匹配到]时,用(替换
    ini=( ${ini[*]/=/=\( } )                    # 匹配到=,用=( 替换
    ini=( ${ini[*]/%/ \)} )                     # 在行末加上 )
    ini=( ${ini[*]/%\( \)/\(\) \{} )            # 后缀匹配到( ),用() {替换
    ini=( ${ini[*]/%\} \)/\}} )                 # 后缀匹配到} ),用}替换
    ini[0]=''                                   # 清空第一行
    ini[${#ini[*]} + 1]='}'                     # 加一行值为}
    INFO "解析后""${ini[*]}"              
}

运行后可见打印:

=> 原文件[default]
;=== 公共配置 ==========================================
; 项目代号
PRO_CODE=test
;=== 服务端配置==========================
; 域名
HOST=127.0.0.1
; erl执行程序所在路径
ERL=erl
; 服务器前缀
PREFIX=dev_
; erl节点间连接端口范围
ERL_PORT_MIN=40001
; erl节点间连接端口范围
ERL_PORT_MAX=44000
; erl文件编译参数
; 不使用lager
ERL_MAKE_PARAM=",debug_info, {d, dbg_tester}, {d, lyj_debug}, {d, debug}, {d, disable_auth}"
; ERL_MAKE_PARAM=",encrypt_debug_info, {d, dbg_tester}, {d, debug}, {d, disable_auth}"
; 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=123456
=> 解析后
ini_section_default () {
PRO_CODE=( test )
HOST=( 127.0.0.1 )
ERL=( erl )
PREFIX=( dev_ )
ERL_PORT_MIN=( 40001 )
ERL_PORT_MAX=( 44000 )
ERL_MAKE_PARAM=( ",debug_info, {d, dbg_tester}, {d, lyj_debug}, {d, debug}, {d, disable_auth}" )
DB_HOST=( localhost )
DB_PORT=( 3306 )
DB_USER=( root )
DB_PASS=( 123456 )
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值