本文是最常用惋增、最基礎(chǔ)的Linux Shell命令紀(jì)錄阀蒂,可用于查閱
注意
- 定義變量時(shí)"="兩邊不能有空格
- 條件測(cè)試語(yǔ)句"["符號(hào)兩邊都要留空格
- 條件測(cè)試的內(nèi)容,如果是字符串比較的話猜旬,比較符號(hào)兩邊都要有空格
示例
-
第一行
#! /bin/bash
转捕,表示該腳本采用的bash語(yǔ)法。如果不設(shè)置改行則腳本可能不會(huì)被執(zhí)行耗式。#! /bin/bash echo "ts" >> /home/cdh/yangjunqiang/weibo/error.log 2>&1
-
將sh腳本添加執(zhí)行權(quán)限胁住,就可以直接
./filename
執(zhí)行腳本chomd a+x filename
-
查看腳本的執(zhí)行過(guò)程,便于腳本的調(diào)試
sh -x filename
常用命令
-
date 打印當(dāng)前系統(tǒng)時(shí)間
date "+%Y%m%d %H:%M:%S" date "+%y%m%d" #-d 可以實(shí)現(xiàn)對(duì)時(shí)間的加減 date -d "-1 day" "+%Y%m%d" date -d "-1 month" "+%Y%m%d" #星期幾 date +%w #獲取昨天的日期 date_=$(date -d "-1 day" "+%Y-%m-%d") #獲取十二小時(shí)之前的時(shí)間 time_=$(date -d "12 hour ago" "+%H:%M:%S")
-
awk
類似Java split分隔文本刊咳,默認(rèn)是以空格分隔彪见,
$1...$n
是指分隔之后的域,從1開始娱挨,$0
表示所有的域
print $0
表示輸出所有的域//-F指定分隔符余指,不指定的話默認(rèn)是空格 awk -F":" '{print $1}'
-
grep
grep -v 反向選擇,顯示出沒有指定字符的結(jié)果
grep -v grep //排除帶grep的命令#! /bin/bash #獲取運(yùn)行的Java process pid跷坝,排除grep自身的pid #先篩選包含java的結(jié)果酵镜,再篩選結(jié)果里里包含 "java -jar"的process pid=$(ps -ef | grep "java" | grep 'java -jar' | grep -v grep | awk '{print $2}') echo $pid
-
重定向:將結(jié)果輸出到文件,而不是標(biāo)準(zhǔn)輸出到屏幕
>
:寫入文件并覆蓋原有內(nèi)容
>>
:在原文件的末尾繼續(xù)寫入柴钻,不會(huì)覆蓋原有內(nèi)容 -
管道(|):將一個(gè)命令的輸出作為另一個(gè)命令的輸入
//在hello.txt文件里搜索包含hello的行并計(jì)數(shù) grep "hello" hello.txt | wc -l
變量
變量的引用需要加上"$"淮韭,最好都跟上
{}
read x 手動(dòng)輸入,從終端獲取輸入的值
-
n 腳本的預(yù)設(shè)變量贴届,可以在腳本運(yùn)行時(shí)跟上作為參數(shù)
sh test.sh 1 2 //1就是$1的值 2是$2的值
$# 傳遞給腳本的參數(shù)個(gè)數(shù)
$0 腳本本身的名字
$@ 傳遞給腳本的所有參數(shù)的列表
$* 以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)
$$ 腳本運(yùn)行的當(dāng)前進(jìn)程ID
$! shell最后運(yùn)行的后臺(tái)process的PID
-
$? 顯示最后命令的退出狀態(tài)靠粪,0表示沒有錯(cuò)誤蜡吧,其他表示有錯(cuò)誤
#! /bin/bash #測(cè)試變量sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@" echo "show parm list:$*" echo "show process id:$$" echo "show precomm stat: $?"
判斷參數(shù)個(gè)數(shù)
if [ $# -gt 0 ];then
echo "參數(shù)個(gè)數(shù)為$#"
fi
判斷語(yǔ)句
if ((a>10)) ; then
echo "這里是代碼段"
elif ((a>2)) ; then
echo "注意(()),這是一種格式"
else
echo "else代碼段"
fi
- 整數(shù)比較:還可以使用
[ ]
。但是就不能使用>, < , =占键,要使用 -lt (小于)昔善,-gt (大于),-le (小于等于)畔乙,-ge (大于等于)君仆,-eq (等于),-ne (不等于)牲距。 - 字符串比較:
==
或者=
- 判斷字符串是否非空:
if [ -n "${String}" ]
不為空為true 注意加雙引號(hào)
判斷檔案屬性
-e :判斷文件或目錄是否存在
-d :判斷是不是目錄返咱,并是否存在
-f :判斷是否是普通文件,并存在
-r :判斷文檔是否有讀權(quán)限
-w :判斷是否有寫權(quán)限
-x :判斷是否可執(zhí)行
if [ -e filename ] ; then
case語(yǔ)句
case $a in
0)
echo "a=0"
;;
1)
echo "a=1"
;;
循環(huán)語(yǔ)句
for循環(huán)
for i in `seq 1 5`; do
echo $i
done
while循環(huán)
#! /bin/bash
a=10
while [ $a -ge 1 ];do
echo "$a"
a=$[$a-1]
done
#循環(huán)條件可以忽略掉
while :; do
ehco "沒有條件的while"
done
字符串操作
-
字符換拼接
back_name=${BACKTIME}"_"${db_name}