<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      shell腳本技巧—創建和清空文件

      2024-10-22 16:46  瀟湘隱者  閱讀(440)  評論(0)    收藏  舉報

      寫這篇文章的起因是因為在分析一個腳本時,看到這么一句腳本,如下所示

      ................................
      >$RMAN_BACKUP/script/rman_backup.sql
      ................................

      最開始我以為它就是將文件rman_backup.sql清空,這個類似于 cat /dev/null > $RMAN_BACKUP/script/rman_backup.sql命令。但是實際調試過程發現它的功能不局限于此。其實它的功能為:如果文件不存在時創建這么一個空文件,如果文件存在時清空該文件。猜測編寫者就是想通過這么一句簡單代碼去實現這樣的兩個功能,他都懶得去寫一段邏輯判斷:"如果文件不存在就創建空的文件,如果文件存在就清空文件"。說這個腳本精妙吧,倒也談不上。但是也確實夠精簡,代價就是閱讀起來晦澀難懂。尤其對shell腳本不精通的人。只是shell編程中確實有一些奇淫技巧.這里不談其優點與缺點,存在既是合理。

      那么在shell中,有哪些創建文件的技巧呢?下面簡單總結一下,方便以后編寫shell腳本時使用,也方便你閱讀shell代碼。

      方法1

      touch命令可以用來創建一個空文件,如果文件已經存在,則會更新其時間戳。

      案例

      if [ ${MYSQL_SERVICE_EXISTS} -eq 1 ] && [ -f "$MYSQL_SERVICE_FILE" ]; then
          touch /usr/lib/systemd/system/mysqld.service
          chmod 644 /usr/lib/systemd/system/mysqld.service
          cat >/usr/lib/systemd/system/mysqld.service <<EOF
          ..................................
          ..................................
      fi

      方法2:

      使用>重定向操作符將輸出重定向到一個文件,如果這個文件不存在,就創建這個文件。

      案例

      ................................
      echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" > $LOG_FILE
      ................................

      一般會用上面這種寫法居多,使用最上面那種寫法倒是比較少見。還有一些結合重定向符與其它命令實現的,如下所示

      printf "it is test!\n" > filename.txt

      方法3:

      使用tee命令可以用來讀取標準輸入并將其寫入到文件和標準輸出。如果文件不存在,tee命令會創建它

      案例

      >$RMAN_BACKUP/script/rman_backup.sql
      rman_backup |tee -a $RMAN_BACKUP/rman_backup.sql

      方法4:

      使用cat命令創建一個文件,如下所示,這里使用Here Document(<<EOF),它允許你輸入多行文本,直到遇到EOF標記,

      案例,創建一個mysqd.service的文件,并向其寫入一段啟動mysql服務的代碼。

      cat >/usr/lib/systemd/system/mysqld.service <<EOF
      [Unit]
      Description=MySQL Server
      Documentation=man:mysqld(8)
      Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
      After=network.target
      After=syslog.target
       
      [Install]
      WantedBy=multi-user.target
       
      [Service]
      User=mysql
      Group=mysql
       
      # Have mysqld write its state to the systemd notify socket
      Type=notify
       
      # Disable service start and stop timeout logic of systemd for mysqld service.
      TimeoutSec=0
       
      # Start main service
      ExecStart=/opt/mysql/mysql8.0/bin/mysqld --defaults-file=/data/mysql/conf/my.cnf $MYSQLD_OPTS
       
      # Use this to switch malloc implementation
      EnvironmentFile=-/etc/sysconfig/mysql
       
      # Sets open_files_limit
      LimitNOFILE = 100000
       
      Restart=on-failure
       
      RestartPreventExitStatus=1
       
      # Set environment variable MYSQLD_PARENT_PID. This is required for restart.
      Environment=MYSQLD_PARENT_PID=1
       
      PrivateTmp=false
      EOF

      在shell腳本中,清空文件有哪些方法呢?一般來說有下面一些方法。

      方法1

      案例

      > mysql_error.log

      方法2

      案例

      echo ''  > mysql_error.log

      這個方法比方法1更容易理解,讀懂。

      方法3

      將/dev/null(一個空設備文件)的內容重定向到文件中,可以清空文件. 寫法類似這樣:cat /dev/null > filename

      案例

      if [ -f "${SLOW_LOG_PATH}/${NEW_SLOW_LOG_FILE}_${LOG_ROTATION_DATE}.log" ] ; then 
          echo "MySQL慢查詢日志已經切換(rotation)"
      else
          cat $SLOW_LOG_PATH/$SLOW_LOG_FILE > $SLOW_LOG_PATH/${NEW_SLOW_LOG_FILE}_${LOG_ROTATION_DATE}.log
          #最后運行的命令的結束代碼(返回值)
          if [ $? -eq 0 ]; then
            cat /dev/null > $SLOW_LOG_PATH/$SLOW_LOG_FILE
          else
            echo "failed to empty file"
          fi
      fi

      方法4

      truncate命令可以用來減少文件的大小,將其設置為0字節,從而清空文件。

      truncate -s 0 mysql_error.log

      方法5

      : > filename.txt 這種方式來清空文件.

      : > mysql_error.log

      其中:表示什么也不做。前面命令中它會清空文件內容(截斷文件);與rm不同,因為rm實際上會完全刪除文件。 此外,如果文件不存在,則 :>filename.txt 實際上會創建該文件。更多關于這個命令的介紹如下所示,參考What is :>filename.txt Doing?[1]文中內容。

      As you have discovered, this just empties the file contents (it truncates the file); that is different from rm as rm would actually remove the file altogether. Additionally, :>file.txt will actually create the file if it didn't already exist.

      : is a "do nothing command" that will exit with success and produce no output, so it'
      s simply a short method to empty a file. In most shells, you could simply do >file.txt to get the same result. It also could be marginally faster than other methods such as echo >file.txt as echo could potentially be an external command.

      Additionally, echo >file.txt would put a blank line in file.txt where :>file.txt would make the file have no contents whatsoever.
      參考資料
      [1]

      1: https://unix.stackexchange.com/questions/552436/what-is-filename-txt-doing

      主站蜘蛛池模板: 成人欧美日韩一区二区三区| 干老熟女干老穴干老女人| 亚洲av一本二本三本| 麻豆成人精品国产免费| 欧美成人影院亚洲综合图| 亚洲AV美女在线播放啊| 一区二区三区人妻无码| 国产午夜福利一区二区三区| 少妇人妻偷人免费观看| 亚洲性av网站| 久久国内精品自在自线91 | 卓资县| 久久天天躁狠狠躁夜夜2020老熟妇| 日韩精品一区二区三区中文| 蜜臀av久久国产午夜福利软件| 久久午夜无码免费| 钦州市| 免费看国产精品3a黄的视频| 在线高清理伦片a| 精品婷婷色一区二区三区| 国产成人av电影在线观看第一页 | 五月婷婷深开心五月天| 亚洲青青草视频在线播放| 九九热视频在线观看精品| 伊人久久精品久久亚洲一区| 大尺度国产一区二区视频| 国产高潮视频在线观看| 国产精品亚洲二区在线播放| 亚洲精品自拍视频在线看| 亚洲欧洲美洲无码精品va| 国产精品最新免费视频| 中文精品无码中文字幕无码专区| 国产精品国产三级国产试看| 午夜久久一区二区狠狠干| 欧美牲交a免费| 国产女人喷潮视频在线观看| 97av麻豆蜜桃一区二区| 国产成人8X人网站视频| 美国又粗又长久久性黄大片| 91麻精品国产91久久久久| 国产精品青草久久久久福利99|