Shell脚本随笔

Shell 跟踪选项
脚本中加入 set -x 那么set 命令之后执行的每一条命令以及加在命令行中的任何参数(包括变量和变量的值)都会显示出来。
每一行之前都会加上加号 + 提示他是跟踪输出的标识。
在子shell中执行的shell跟踪命令会加两个加号 ++
set +x 就是关闭 跟踪

#!/bin/sh
set -x
echo -n "YES OR NO"
read answer
answer=`echo $answer | tr [a-z] [A-Z]`
+ echo -n 'YES OR NO'
YES OR NO+ read answer
Y
++ tr '[a-z]' '[A-Z]'
++ echo Y
+ answer=Y

Shell 脚本输出项

在代码中使用echo 和print 输出 打印日志
echo $1

根据层次控制输出
在脚本的开始设置一个变量 脚本运行时测试该变量 然后根据该变量的值决定是显示还是禁止调试指令,
使用echo 后需要注释 使用下面的只需要更改参数就能分层次 或不输出

#!/bin/sh
debug=2
test $debug -gt 0 && "A"
test $debug -gt 1 && "B"
test $debug -gt 2 && "C"

用函数简化错误检查

按照惯例,成功执行的指令将把shell 变量 “$?” 赋值 为 0

使用函数 “$?” 作为第一个参数 报告内容作为第二个参数

alert () {
 # usage: alert
 if [ "$1" -ne 0 ]
 then 
   echo "WARNING : $2  执行失败 " >&2
   exit $1
 else
   echo "INTO: $2 执行成功" >&2
  fi
}

mv  $file1 $file2
alert $? "mv  $file1 $file2"

使用函数实现shell 中间暂停 或单步执行

alert () {
  echo "Press [Enter] to continue" >&2; read x
}

时间日期

#!/bin/sh
second=`date +'%S'`
minute=`date +'%M'`
hour=`date + '%k'`

day=`date +'%d'`
month=`date +'%m' | sed 's/0*//'`
year=`date + '%Y'`
weekday=`date +'%w'`

参数个数 $#

比较 测试
-eq =
-ne !=
-gt >
-ge >=
-lt <
-le <=

test 和 方括号好弧 可以替用 [ ] 表示执行的结果是否为真

&& 与 两边可以是条件 也可以是函数 代码 前面的执行成功 才会执行后面语句
|| 或 前面的执行失败 才会执行后面语句

[ ] 中的-a 是与
[ ]中的-o 是或

if [ -n $1] 和 if [ $1 ] 都是判断参数是否已定义
if [ -z $1] 和 if [ ! $1 ] 都是判断参数是否未定义

设置默认值

下面都是判断变量是否为空,为空后赋值
if [ -z “$VAR” ]
then
VAR=“AAA”
fi

[ -z “$VAR” ] && VAR=“AAA”

[ ! “$VAR” ] && VAR=“AAA”

[ “$VAR” ] || VAR=“AAA”

变量替换
${var:=“A”} ${var1:=1} KaTeX parse error: Expected '}', got 'EOF' at end of input: {var2:=LANG}

第一个冒号表示执行非活动的shell命令
第二 := 表示 变量和值比较 如果变量没有被设置过或变量没有值 则 会赋值 被设置后不会被赋值

第一个冒号后面 可以跟多个 变量

文件编码转换
iconv -f gb2312 -t utf-8 aaa.txt >bbb.txt
file 文件名称 查看文件编码格式

普通重定向
< file file 文件的内容作为输入
<< EOF
EOF 双输入重定向符 接着是一个唯一的定界符号 文本最后一行 是与之匹配的结束定界符。

> file file文件的内容为输出 文件不存在则会创建 文件 存在则会覆盖
>>file file文件的内容未输出 输出的内容会追加到file文件的末尾

表达式 2>/dev/null >file 将错误输出定向到/dev/null 标准输出定向到 file中
表达式 >/dev/null 2>file 将标准输出定向到/dev/null 错误输出定向到file中 和上一句相反
表达式 >file 2>&1 表达上标准输出和错误输出都被定向到制定文件file中
表达式 &>file 上一句的简写版
表达式 2>file 将表达式的标准错误输出定到制定文件

shell 中的计算

expr 用于计算各种表达式的值 可以包含字符串 逻辑运算和数学函数
加: answer=`expr $a + $b`
减: answer=`expr $a - $b`
乘: answer=`expr $a * $b`
除: answer=`expr $a / $b`
同余: answer=`expr $a % $b`

shell自身可以执行数学运算,减少代码占用的内存资源(好像智能是整数)
加:answer=$(($a+$b))
减:answer=$(($a-$b))
乘:answer=$(($a*$b))
除:answer=$(($a/$b))
同余:answer=$(($a%$b))
指数:answer=$(($a**$b))
多个计算顺序:answer=$((($a+$b)*$c))

bc计算 可以计算小数
如: answer=`echo “ a + a+ a+b”|bc`
answer=`echo “scale=5; a / a/ a/b”|bc-l` (scale 小数的精度 )

vi编辑器
复制:将光标移到复制的首位置,按下v,用hjkl (前后上下)移动,按y复制,按p粘贴
冒号表示命令模式
i 是插入模式
yy 复制当前行 p是粘贴
dd 删除当前行
:wq 保存退出
:set number 显示行号

awk几个用法

echo $LANG | awk -F’’ ‘{print $1,$0,NF}’
awk 域变量从$1 开始 递增 -F 表示分隔符号 $0比较特殊 保存着整个字符串 NF 表示列数
echo $LANG | awk -F’
’ ‘{print $(NF-1)}’ 倒数第二列
length 表示字符串长度
substr($1,开始,结束)

awk -F’|’ ‘$2 == “AAA” {print $0}’ /etc/hosts
使用 | 作为分隔符号 第二例等于AAA 的行

awk -F’|’ ‘/AAA/ {print $0}’ /etc/hosts
使用 | 作为分隔符号 行包含AAA 的行

awk -F’|’ ‘$1 ~ /AAA/ {print $0}’ /etc/hosts
使用 | 作为分隔符号 第一列包含AAA 的行 ~后面可以是正则表达式

awk ‘{if (length !=0}’ print $0} 输出非空行

sed常用

echo $VAR| sed -e “s/搜索字符串/替换字符串/g” # g表示全局 没有的话仅仅替换找到的第一个项

单引号 和 双引号

在双引号中使用$可以是变量 当引号中是字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值