shell 备忘录

变量输出

echo "This is a ${variable}"

命令替换

  • 反引号字符 (`)
  • $() 格式
testing=`date` 或 testing=$(date)

数学替换

  • expr命令执行数学操作
# 命令行操作
expr 1+5

# shell 操作

a=10
b=20
c=$(expr $a * $b)

在这里插入图片描述

  • 使用方括号

上面的写法过于繁琐,所以有了 $[ operation ] 这种写法。而且,无需担心 shell 会误解乘号或其他符号,也就不会把运算符号理解成通配符,因为它在方括号里。

a=10
b=20
c=$[$b / $a]

注:bash shell 只支持整数运算,需要浮点运算等复杂操作运算可以使用 z shell 或使用内建的bash计算器(又称作bc)

var1=$(echo "scale=4; 3.44 / 5" | bc) 
或
var5=$(bc << EOF 
scale = 4 
a1 = ( $var1 * $var2) 
b1 = ($var3 * $var4) 
a1 + b1 
EOF 
) 

退出状态码

  • 查看退出状态码
date
echo $?

在这里插入图片描述

  • exit 命令

默认shell脚本会以脚本中的最后一个命令的退出状态码退出。且退出状态码被缩减到了0~255的区间。

结构化命令

  • if-then 语句
if command
then
	commands
fi
或者
if command; then
commands
fi
  • if-then-else 语句
if command
then
	commands
else
	commands
fi
  • if-then-elif-then 语句
if command1
then
	commands
elif command2
then
	more commands
fi
  • test 命令

用于测试命令退出状态码之外的条件。如果 test 命令中列出的条件成立,test 命令就会退出并返回退出状态码0;如果条件不成立,test命令就会退出并返回非零的退出状态码。

  • 使用方括号[]替代test命令
    注意,第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错
if [ condition ]
then 
	commands
fi

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • if-then 高级特性

bash shell提供了两项可在if-then语句中使用的高级特性:

  1. 用于数学表达式的双括号
  2. 用于高级字符串处理功能的双方括号(支持模式匹配,如正则等)

在这里插入图片描述

  • case 语句
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;

sed 用法

在这里插入图片描述

# 使用s模式,用 big test 替换 test
echo "This is a test" | sed 's/test/big test/'

# 将 cat 替换为 dog;
# sed编辑器并不会修改文本文件的数据。它只会将修改后的数据发送到 STDOUT
sed 's/dog/cat/' data1.txt

# 在sed命令行上执行多个命令时,只要用-e选项
# 两个命令都作用到文件中的每行数据上。命令之间必须用分号隔开,并且在命令末尾和分号之间不能有空格。
sed -e 's/brown/green/; s/dog/cat/' data1.txt

# 从文件中读取编辑器命令,script1.sed每行一个编辑命令;使用.sed作为后缀提高理解
sed -f script1.sed data1.txt 

在这里插入图片描述
在这里插入图片描述

awk&gawk 用法

在这里插入图片描述

gawk程序脚本用一对花括号来定义。你必须将脚本命令放到两个花括号({})中
由于gawk命令行假定脚本是单个文本字符串,你还必须将脚本放到单引号中
正确写法:gawk ‘{print “Hello World!”}’

  • 使用数据字段变量

自动给一行中的每个数据元素分配一个变量。在文本行中,每个数据字段都是通过字段分隔符划分的。gawk在读取一行文本时,会用预定义的字段分隔符划分每个数据字段。gawk中默认的字段分隔符是任意的空白字符(例如空格或制表符)

$0代表整个文本行;
$1代表文本行中的第1个数据字段;
$n代表文本行中的第n个数据字段。

# 使用-F设置分隔符
gawk -F:(用:来分割) '{print $1}' /etc/passwd
  • 使用多个命令
#在命令行上的程序脚本中使用多条命令,在命令之间放个分号即可
echo "My name is Rich" | gawk '{$4="Christine"; print $0}'  # 该程序将字段变量$4赋值,然后打印整条语句
  • 从文件中读取程序

跟sed编辑器一样,gawk编辑器允许将程序存储到文件中,然后再在命令行中引用。

# script2.gawk 的内容
{
text = "' 's home directory is "
print $1 text $6 # 引用变量时不需要加$符号
}
gawk -F: -f script2.gawk /etc/passwd 
  • 前置&后置操作
gawk 'BEGIN {print "Hello World!"}' 
gawk 'END {print "This is an ending!"}' 

  • 使用脚本
    在这里插入图片描述

grep

grep -v “grep” takes input line by line, and outputs only the lines in which grep does not appear. Without -v, it would output only the lines in which grep does appear.
e.g. ps -ef | grep yunmai-cancreate | grep -v grep | awk '{print $2}'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值