背景

最近看同事写的linux-shell脚本,发现好多语法看不懂.这里补习一下.

  1. shell函数调用

  2. 拼接cmdmingl

funHasString() {
  result=$(echo "$1" | grep "$2")
  if [[ "$result" != "" ]]; then
    return 0
  else
    return 1
  fi
}

heathCheck() {
  serverFlag=0
  canalFlag=0
  for ((i = 0; i < 25; i++)); do
    sleep 1

    st1=$("$CMD" -c "$CONF_FILE" status "$NAME_SERVER")
    echo "$st1"

    funHasString "$st1" "RUNNING"

     if [[ $? -eq 0 ]]; then
          echo 'server 启动成功'
          serverFlag=1
    fi

3.批量给某个目录下后缀sh的文件执行命令. // 附录2 // 附录5

# 批量给sh的文件赋权限
find . -name '*.sh' -exec chmod +x {} \;
  1. 使用 sed -i –和sed -i -e 搜尋與取代文字 // 附录3,6,7 批量替换sh文件中的内容 ```bash #对发布的文件/做一些处理,版本号替换,修改权限等 sed -i -e “s/BUILD_VERSION/$VERSION/” bin/*.sh

当我想替换文件中的路径时,使用转义符号(\)会比较麻烦且可读性很差。

比如要将abc.sh中的/a/b/c替换成/d/e/f,命令如下:

分隔符由/换成#(其他字符也可以,只要跟在s命令后面即可):

sed -i ‘s#/a/b/c#/d/e/f#g’


4.1 有的sed -i -e的参数末尾有个/g
// 附录4 页面搜索/g
```bash
sed -i -e 's/123/456/g' sedtest.txt

4.2 sed使用示例 // 附录4

5.将条件判断(if语句)写在bash命令行中

// 附录8

ps -ef | grep eureka |grep -v grep ;if [ $? == 0 ]; then ps -ef | grep eureka |grep -v grep |awk ‘{print $2}’|xargs kill -9; fi

Grep在匹配行之前显示文件名和行号

grep -n --with-filename 'pattern' file

参考

1.Linux–shell中$()命令 2.每天一个Linux命令(20)–find命令之exec 3.使用sed -i –和sed -i -e 搜尋與取代文字 4.Linux sed 命令–和使用示例 5.find <path> -name "*.sh" -exec chmod +x \{\} \; 是如何工作的? 6.sed替换内容中有斜杠该怎么处理 7.mac 执行sed -i指令时,总是出现extra characters at the end of command 8.将条件判断(if语句)写在bash命令行中 Linux(二):巧用分号在命令行执行逻辑判断语句 9.Grep在匹配行之前显示文件名?

原创文章转载请注明出处: linux shell或命令行