標準的shell指令碼包含要素:
1、指令碼用法注釋,申明指令碼執行方式,可以優雅和簡化執行步驟
#!/bin/bash
2、3、賦值運算子不能有空格,算術運算子必須有空格
4、條件判斷,中括號和條件判斷式中間必須有空格
5、if 判斷
#!/bin/bashif [ $1 -eq 1 ]
then
echo "hello shell!"
elif [ $1 -eq 2 ]
then
echo "hate shell"
fi
6、case語句
#!/bin/bashcase $1 in
1) echo "nihao"
;;2)
echo "hello"
;;*)
echo "gun"
;;esac
7、for迴圈
#!/bin/bashs=0for((i=1;i<=100;i++ ))
do s=$[$s+$i]
done
echo $s
8、while迴圈
#!/bin/bashs=0i=0
while [ $i -le 100 ]
do s=$[$s + $i]
i=$[$i + 1]
done
echo $s
9、切割檔案的第一列:
cut -d "" -f 1 filename.txt
10、cut
一、切割cut.txt第一列
cut -d " " -f 1 cut.txt
二、在檔案cut.txt中切割出shen
cat cut.txt | grep shen | cut -d " " -f 1
11、sed
(以檔案sed.txt為例)
一、將「 ni hao」這個單詞插入到sed.txt第二行下,列印。
sed "2a ni hao" sed.txt
二、刪除sed.txt檔案所有包含wo的行
sed '/wo/d' sed.txt
三、將sed.txt檔案中wo替換為ni
sed "s/wo/ni/g" sed.txt
四、將sed.txt檔案中的第二行刪除並將wo替換為ni
sed -e "2d" -e "s/wo/ni/g" sed.txt
12、awk
awk[選項引數] 'pattern1 pattern2...' filename pattern:表示awk在資料中查詢的內容,就是匹配模式 action:找到匹配內容時所執行的一系列命令
一、搜尋passwd檔案以root關鍵字開頭的所有行,並輸出該行的第7列
awk -f: '/^root/' passwd
二、搜尋passwd檔案以root關鍵字開頭的所有行,並輸出該行的第1列和第7列。中間以「,」隔開
awk -f: '/^root/' passwd
三、只顯示passwd的第1列和第7列,以逗號分割,且在所有行前面新增列名user,shell在最後一行新增「gg,bin/haoya」
awk -f: 'begin end' pass
四、統計passwd的檔名,每行的行號,每行的列數
awk -f : '' passwd
五、查詢sed.txt中空行所在的行號
awk '/^$/' sed.txt
13、sort
作用:將檔案進行排序,並將排序結果標準輸出
按照「:」分割後的第三列倒序排序 -t:設定排序時所用的分隔字元 -n:依照數值的大小排序 -r:以相反的順序來排序 -k:指定需要排序的列
sort -t : -nrk 3 sed.txt
*練習:
找出當前資料夾(/home)下所有的文字檔案內容中包含有字元"shen"的檔名稱
grep -r "shen" /home | cut -d ":" -f 1
Shell程式設計 shell特性
linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...
Shell程式設計 Shell函式
shell函式 1.將命令序列按格寫在一起 2.可方便重複使用命令序列 3.shell函式定義 function 函式名 4.呼叫函式的方法 函式名 引數1 引數2 5.shell函式應用示例 1 兩個數字求和 要求 通過sum 定義函式 兩個數求和 方法一 root localhost vim d...
Shell程式設計
1 建立指令碼 vi emacs等即可 bin sh 2 shell變數 對shell來講,所有的變數的取值都是乙個字串 shell是一種解釋性語言,變數無需事先定義 shell中的系統變數 程式命令列引數的數目 儲存前乙個命令的返回值 0 當前程式名 以 1 2 形式儲存所有輸入的命令列引數 以 ...