shell那点事儿——运维工程师必会shell知识


前言

Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理,
Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。
Shell是运维工程师最基础也是最常用脚本语言,可以大大的提高批处理效率。当然,随着技术的发展,新生了更多批处理工具,如ansible,当然也包含当下大热的Python。

一、常用的shell小知识

变量

自定义变量:直接定义,只在当前shell才能生效
环境变量:export加变量,在所有shell中生效
如果 1.sh 要使用 2.sh 里面的变量,可直接在 1.sh 中添加 source 2.sh或者 .2.sh

位置变量:

$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

预定义变量:

$0       脚本名

$*       所有的参数

$@       所有的参数

$#       参数的个数

$$       当前进程的PID

$!       上一个后台进程的PID

$?       上一个命令的返回值 0 表示成功

字符串长度判断

*注:使用-z 或-n 判断字符串长度时,变量要加双引号*
[ -z "$a" ]   # 字符串长度为0

[ -n "$a" ]   # 字符串长度不为0

字符串截取

abc="abc-123-df-11-192.168.1.1"

echo "${abc#*-}"        # 左边最小匹配(截取出较长部分)

123-df-11-192.168.1.1 

echo "${abc##*-}"       # 左边最大匹配(截取出较短部分)

192.168.1.1

echo "${abc%-*}"        # 右边最小匹配

abc-123-df-11           

echo "${abc%%-*}"       # 右边最大匹配

变量判断、赋值

${varia-value} :假如$varia没有设定,则使用value作传回值。(空值及非空值时不作处理) 

${varia:-value} :假如$varia没有设定或为空值,则使用value作传回值。(非空值时不作处理)

${varia+value} :假如$varia设为空值或非空值,均使用value作传回值。(没设定时不作处理)

${varia:+value} :若$varia为非空值,则使用value作传回值。(没设定及空值时不作处理)

${varia=value} :若$varia没设定,则使用value作传回值,同时将$varia赋值为value 。(空值及非空值时不作处理)

${varia:=value} :若$varia没设定或为空值,则使用value作传回值,同时将$varia赋值为value 。(非空值时不作处理)

${varia?value} :若$varia没设定,则将value输出出至STDERR。(空值及非空值时不作处理)

${varia:?value} :若$varia没设定或为空值,则将value输出至STDERR。(非空值时不作处理)

整数运算

$[]
小数运算:bc工具

echo 'scale=2;10/3' |bc  # 用 scale 保留两位小数点
expr   # 可进行加减乘除运算,数字与运算符之间必须有空格,使用乘号'*',必须用\反斜杠
expr 1 \* 

shell中各括号用途

()用途 1:在运算中,先计算小括号里面的内容
用途 2:数组
用途 3:匹配分组
(( ))用途 1:表达式,不支持-eq 这类的运算符。不支持-a 和-o,支持<=、>=、<、>这类
比较符和&&、
$( )执行 Shell 命令,与反撇号等效
$(( ))用途 1:简单算数运算用途
2:支持三目运算符 $(( 表达式?数字:数字 ))
[ ]条件表达式,里面不支持逻辑判断符
[[ ]]条件表达式,里面不支持-a 和-o,不支持<=和>=比较符,支持-eq、<、>这类比较符。支持=~模式匹配,也可以不用双引号也不会影响原意,比[]更加通用
$[ ]简单算数
{ }对逗号(,)和点点(…)起作用,比如 touch {1,2}创建 1 和 2 文件,touch{1…3}创建 1、2 和 3 文件
${ }用途 1:引用变量
用途 2:字符串

echo输出

echo -e      可以解释"\t \n"

echo         本身输出带换行

echo -n      不换行输出


颜色输出

echo -e "\e[1;31m请输入你的选择: \e[0m"        # 31-37前景色41-47背景色 0m是恢复

    字体颜色            字体背景颜色             显示方式
    30:黑                40:黑               0:终端默认设置
    31:红                41:深红             1:高亮显示
    32:绿                42:绿               4:下划线
    33:黄                43:黄色             5:闪烁
    34:蓝色              44:蓝色              7:反白显示
    35:紫色              45:紫色              8:隐藏
    36:深绿              46:深绿
    37:白色              47:白色

终端更改

export PS1="\[[\[\e[5;31m\]\u\[\e[0m\]@\h \W \]]\\$ ">>/$home/.bashrc

清空屏幕打印

printf "\e[2J\e[H"

日期相关

获取日期:
date "+%F %T"
date "+%Y-%m-%d %H:%M:%S"

获取几天前的日期:
date -d "n days ago" +%Y-%m-%d (+%F)       n为天数

把日期和时间转换成时间戳:
date -d "2016-12-15 18:00:00" +%s

把时间戳转成时间:
date -d '@1481842800' '+%F %T'

生成随机字符串

生成随机字符串(包含数字、大小写英文、符号)
cat /dev/urandom | strings -n C | head -n L  # C表示字符串的字符数,L表示要生成多少行字符

生成随机字符串(包含数字和字母)
echo $RANDOM |md5sum |cut -c 1-10
openssl rand -hex 5 随机产生10长度字符串

生成随机数字
date +%N |cut -c 1-8

比较

[ 1 -gt 10 ]            大于
[ 1 -lt 10 ]            小于
[ 1 -eq 10 ]            等于
[ 1 -ne 10 ]            不等于
[ 1 -ge 10 ]            大于等于
[ 1 -le 10 ]            小于等于

信号

trap "" signal
 HUP(1)          挂起,通常因终端掉线或用户退出而引发
 INT(2)          中断,通常因按下Ctrl+C组合键而引发
 QUIT(3)         退出,通常因按下Ctrl+/组合键而引发
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值