栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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文件作为标准输入
command 0同上
command <从标准输入中读入,直到遇到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

例:

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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/460793.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号