环境: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