【Shell系列】之shell脚本中常用句法

环境:shell脚本

1、怎么打印grep后的变量

方法1

gp=`grep smthg <filename>`
echo -n "$gp"

参考网址:https://www.linuxquestions.org/questions/programming-9/remove-new-line-in-the-output-of-grep-command-4175497475/

方法2

grep ... > output.txt

参考网址:https://stackoverflow.com/questions/16631423/using-linux-grep-command-need-output-to-text-file-cleaner-output

法3 待验证
参考网址:https://stackoverflow.com/questions/47096347/unable-to-pipe-output-after-grep

2、echo换行

echo -e "\n"

3、how to pause in a loop of “read line”

read -p "press any key to continue..." < /dev/tty

参考网址:https://stackoverflow.com/questions/46021316/how-to-pause-in-a-loop-of-read-line

4、执行字符串命令

cmd="echo hello word"
eval $cmd

or

data=`df`   用反引号就可以了
$var={`df -lh | grep Filesystem`}
date=$(command)

参考网址:https://blog.csdn.net/u013176681/article/details/51512971
参考网址:https://blog.csdn.net/yabingshi_tech/article/details/53517113

5、判断上一条命令是否执行成功

if [ $? -ne 0 ]; then
    echo "failed"
else
    echo "succeed"
fi

-eq     等于
-ne    不等于
-gt     大于
-lt    小于
ge    大于等于
le    小于等于

参考网址:https://blog.csdn.net/maybe_lee/article/details/78604927

6、分割字符串

info='abcd;efgh'
fstr=`echo $info | cut -d \; -f 1`
sstr=`echo $info | cut -d \; -f 2`

参考网址:https://www.jb51.net/article/60904.htm

7、提取文件名

$ var=/dir1/dir2/file.txt
$ echo $(basename ${var})
file.txt

$ var=/dir1/dir2/file.txt
$ echo $(basename ${var} .txt)
file

参考网址:https://blog.csdn.net/universe_hao/article/details/52640321

8、去除shell中 ^M符号

# 修改fileformat
# vim 打开下, 输入
:set ff = unix

or
sed -i 's/^M//g'  filename
注意^M 是按住ctrl 然后按 v 在按 M 

参考网址:https://blog.csdn.net/c1481118216/article/details/78328156

9、shell输入命令提示

  REQUIRED_ARGUMENTS=2
  n_arguments="$#"
  
  if [ ! "\${n_arguments}" -eq \$REQUIRED_ARGUMENTS ]; then
    printf 'Invalid number of arguments. Required: %d, supplied: %d\n' \
      \$REQUIRED_ARGUMENTS \$n_arguments
    echo 'usage: binary_compare_two_files file1 file2'
    exit 1
  fi

参考网址:https://unix.stackexchange.com/questions/46952/bash-function-to-compare-two-binary-files

10、输出连续N个字符

#!/bin/bash
IP='192.168.1.5'
DESCRIPTION='内部服务器5'
# spacenum=`expr 16 - ${#IP}`
spacenum=12
spaces=$(seq -s ' ' $spacenum | sed 's/[0-9]//g')
echo -e "$IP$spaces- $DESCRIPTION"

参考网址:https://my.oschina.net/antsky/blog/1800301

11、sed相关操作

-e : 可以在同一行里执行多条命令

sed  's/11/00/g'  's/22/99/g'

不加 -e 只有 ‘s/11/00/g’ 进行了操作

sed -e 's/11/00/g' -e  's/22/99/g'

加上 -e 时 ‘s/11/00/g’ 与 ‘s/22/99/g’ 都进行了操作

参考网址:http://www.cnblogs.com/wangqiguo/p/6718512.html

12、浮点运算

**方法1 **

i=10
j=$(echo "$i*0.2-2.5"|bc)
echo $j

方法2

i=10
j=`bc <<< "0.2*(${i}-1)-2.5"`
echo $j

shell 包含三个命令:bc、expr、let可用于数值计算。
输入:整数,let和expr都无法进行浮点运算,但是bc和awk可以。
输出:bc、expr可直接显示计算结果;let则丢弃计算结果,可通过传递结果到变量,取变量值获得计算结果。
http://blog.csdn.net/praylucky/article/details/6252963
方法3

$ echo "scale=3; 1/13"  | bc
    .076
$ echo "1 13" | awk '{printf("%0.3f\n",$1/$2)}'
    0.077

scale用来控制小数点后面保留的位数
参考网址:https://www.cnblogs.com/qqcwannagraduate/p/5291956.html

13、shell调试

方法1
Shell本身提供一些调试方法选项:

  • -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。
  • -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出。
  • -x,提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。

使用这些选项有三种方法(注意:避免几种调试选项混用)

  • 1.在命令行提供参数:$sh -x script.sh
  • 2.脚本开头提供参数:#!/bin/sh -x
  • 3.在脚本中用set命令启用or禁用参数:其中set -x表示启用,set +x表示禁用

方法1
BASH Debugger

  • 主页:http://bashdb.sourceforge.net/
  • 下载地址:https://sourceforge.net/projects/bashdb/files/
  • 使用手册:http://bashdb.sourceforge.net/bashdb-man.html

借助第三方工具bashd可以更加精细地调试Shell脚本。具有断点、单步执行、观察变量等功能。
下载时需根据所使用的bash版本选择相应的bashdb,否则会提示因为版本不符合而无法安装。

  • 查看bash版本:bash --version
  • 典型用法:bashdb --debug script.sh

参考网址:https://www.cnblogs.com/anliven/p/6032081.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值