Linux的shell小腳本的用途
熟悉Linux的朋友們,對linux的命令,肯定都不陌生,大部分時候我們都可以使用系統自帶的命令來輕松完成我們的工作。如果我們再能簡單掌握下這些shell的制作,在某些場景下對我們的工作是非常有利的,當然如果你shell功底深,那麼你完全可以制作出很多有意思的東西。
本篇散仙只是簡單介紹下怎麼入門,以及這些封裝的shell腳本在一些集群作業帶來的便利,
下面截個tomcat的bin下面的目錄,來熟悉一下我們最常用的tomcat的一些腳本組成
上圖中,我們會發現大部分都是cat和sh結尾的,而這個sh結尾的其實就是linux下自定義的shell的命令用來完成特定的功能,而以cat結尾的這個就是Windows上的批處理命令,類似win上的shell,有了這兩種腳本就可以兼容Windows和linux的平台應用了。
我們先制作一個經典的Hellow World的shell腳本,步驟非常簡單,打開你的記事本(推薦使用Notepad++),輸入以下內容即可。
然後保存成x.sh即可,然後我們就可以上傳到linux上,並賦予可執行權限後,就可以執行sh x.sh看輸出效果了,截圖如下:
下面在給一個使用shell循環打印10-20間的例子,內容如下
依舊上傳linux,添加可執行權限後,進行執行打印效果如下:
另外一點,需要特別注意的是,由於編輯腳本是直接在windows下寫的,並沒有使用特定的編輯器或者其他工具,所以很有可能出現一些莫名其妙的異常,這些錯誤是我們眼睛看不到的,遇到這個情況,例如如下異常或者提示語法錯誤
Java代碼
unexpected end of file
我們可以在linux上使用cat命令,進行清洗數據,
使用工具 cat 和 tr, 方法如下:
bash$ cat -v startqftest.sh |tr -d "^M" > qf.sh
其中 startqftest.sh 是存在問題的腳本, qf.sh是新生成的文件。
sed 's/^M//' test.sh > back.sh^M是Ctrl+v Ctrl+m
解釋一下, cat 可以查看許多不可見這符,
cat -t 顯示TAB 為 ^I
cat -e 顯示行尾為 $,
cat -v 顯示不可見字符,用^M表示,所以^M就表示不認識的不可見字符。M 表示Mark,標記的意思。
tr - translate or delete characters
另外,cat 還可以用來調Makefile,
cat -t Makefile 查看命令中有非Tab開頭的,
grep '^ ' Makefile 查找命令行中以空格開頭的行
cat -e Makefile 查看行尾是否正確,防止\後面多一個空格,
grep '\\[ ]$' Makefile 找出以上那樣的行
最後,散仙還講說一下,會簡單的shell編程帶來的好處,當我們使用hadoop進行集群提交作業時,你可能使用的是C++,或者PHP,或者Python語言等非Java編寫的MR程序,這種方式就是Hadoop Streaming的方式了,當我們向集群提交作業時,可能會執行一段很長的shell命令來提交作業,並且在每個集群上都要分發一份命令,而這時候我們封裝一個shell腳本,就很方便了,因為你不可能去手動執行每個節點上的命令,假設集群規模很大,那將是多麼耗時的一件事情,而且還容易出錯,所以,封裝個腳本可以重復利用,也很簡潔,如下所示的一段提交命令
Java代碼
#!/bin/sh
bin/hadoop jar
hadoop-streaming-1.2.0.jar \
-files map.py \
-files r.py \
-mapper 'map.py' \
-reducer 'r.py' \
-input /note \
-output /noteout
封裝一個shell腳本裡面,可以重復使用,執行起來也非常方便,當然使用shell編程的可以完成很多事情,散仙上面所舉的例子只是它的冰山一角,有興趣的朋友可以再去深入的研究一下。