1. 程式人生 > >常用shell指令碼片段

常用shell指令碼片段

下面是本人工作中比較常用的shell指令碼片段,記錄下來,方便查詢使用。部分指令碼來源於網路並做了改進。

【判斷變數是否包含某字串】
key=$1
gre1="\033[42;30m"
gre2="\033[0m"
red1="\033[45;37m"
red2="\033[0m"
if [[ "$key" =~ "abcd" ]];then
    echo -e "${gre1}yes,contain${gre2}"
else
    echo -e "${red1}no,not contain${red2}"
fi
【檢測mysql是否存活】
ping_fail_count=0
for ((i=1;i<=3;i++)); 
do
    check_mysql_active=`$mysqladmin -h$ip -P$port -uuser -p'password' ping 2>&1`
    if [ "$check_mysql_active" = "mysqld is alive" ];then
        echo "port is active."
        break
    else
        echo "check $i time"
        let ping_fail_count++
        sleep 2
    fi
done
if [ $ping_fail_count -eq 3 ];then
    echo "port is not active!"
fi  
【檢測redis是否存活】
ping_fail_count=0
for ((i=1;i<=3;i++)); 
do
    check_redis_active=`redis-cli -h $ip -p $port ping 2>&1`
    if [ "$check_redis_active" = "PONG" ];then
        echo "port is active."
        break
    else
        echo "check $i time"
        let ping_fail_count++
        sleep 2
    fi
done
if [ $ping_fail_count -eq 3 ];then
    echo "port is not active!"
fi 
【判斷linux下某個命令是否存在】
cmd=$1
command -v $cmd > /dev/null 2>&1 && ret=1 || ret=0
if [ $ret -eq 0 ];then
	echo "command is not found"
else
	echo "command is exist"
fi
【小數比較大小】
num1=$1
num2=$2
c=`echo "$num1"|awk 'BEGIN{FS="."} {print length($2)}'`
d=`echo "$num2"|awk 'BEGIN{FS="."} {print length($2)}'`
if [ $c -ge $d ];then 
tmp=$c
else
tmp=$d
fi
temp=1
for ((i = 0; i < $tmp;i ++));
do
temp=${temp}0
done
a1=`echo "$num1*$temp" |bc`
b1=`echo "$num2*$temp" |bc`
c=`echo "$a1"|awk 'BEGIN{FS="."} {print $1}'`
d=`echo "$b1"|awk 'BEGIN{FS="."} {print $1}'`
if [ $c -gt $d ];then
    echo "gt"
elif [ $c -eq $d ];then 
    echo "equal"
else    
    echo "lt"
fi
【去掉數字前面的0,比如去掉000081前面的0000】
a=$1
b=`expr $a + 0`
echo $b
【判斷遠端主機上檔案是否存在】
ssh_host="[email protected]$hostip"
mycnf="/data/data_3306/my.cnf"
if ssh $ssh_host test -e $mycnf;then 
	echo "exist"
else 
	echo "not exist"
fi

【linux shell互動yes or no】
while true; do
    read -p "請選擇繼續或退出(yes|no): " yn
    case $yn in
        yes ) break;;
         no ) exit;;
          * ) echo "Please input yes or no";;
    esac
done
【判斷IP地址是否合法】
ip=$1
valid_check=$(echo $ip|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if echo $ip|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then
    if [ ${valid_check:-no} == "yes" ]; then
        echo "$ip"
    else
        echo "ip $ip not available!"
    fi
else
       echo "ip format error!"
fi
【判斷IP是否可以ping通】
ip=$1
ping_fail_count=0
for ((i=1;i<=3;i++)); 
do
if ping -w 1 -c 1 $ip > /dev/null;then
    echo -e "$ip ping is successful."
    break
else
    echo "ping $i times fail"
    let ping_fail_count++
    sleep 1
fi
done
if [ $ping_fail_count -eq 3 ];then
    echo "$ip ping is failure!"
fi 
【獲取本機ip地址】
get_server_ip()
{
[ -e /etc/os-release ] && centos_version=`cat /etc/os-release|grep VERSION_ID|awk -F"=" '{print $2}'|sed 's/\"//g'`||centos_version=0
cat /proc/net/dev|tail -n +3|grep -v lo|awk -F: '{print $1}' > /tmp/cardlog
cat /tmp/cardlog | while read card
do
if [ $centos_version -eq 7 ];then
    server_ip=`ifconfig $card | grep -w "inet"|awk '{print $2}'`
else
    server_ip=`ifconfig $card | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}'`
fi
    if [ -z "$server_ip" ];then
        continue
    else
        echo $server_ip
        break
    fi
done
}
server_ip=$(get_server_ip)
echo "$server_ip"

下面是本人工作中比較常用的shell指令碼片段,記錄下來,方便查詢使用。部分指令碼來源於網路並做了改進。

【判斷變數是否包含某字串】
key=$1
gre1="\033[42;30m"
gre2="\033[0m"
red1="\033[45;37m"
red2="\033[0m"
if [[ "$key" =~ "abcd" ]];then
    echo -e "${gre1}yes,contain${gre2}"
else
    echo -e "${red1}no,not contain${red2}"
fi
【檢測mysql是否存活】
ping_fail_count=0
for ((i=1;i<=3;i++)); 
do
    check_mysql_active=`$mysqladmin -h$ip -P$port -uuser -p'password' ping 2>&1`
    if [ "$check_mysql_active" = "mysqld is alive" ];then
        echo "port is active."
        break
    else
        echo "check $i time"
        let ping_fail_count++
        sleep 2
    fi
done
if [ $ping_fail_count -eq 3 ];then
    echo "port is not active!"
fi  
【檢測redis是否存活】
ping_fail_count=0
for ((i=1;i<=3;i++)); 
do
    check_redis_active=`redis-cli -h $ip -p $port ping 2>&1`
    if [ "$check_redis_active" = "PONG" ];then
        echo "port is active."
        break
    else
        echo "check $i time"
        let ping_fail_count++
        sleep 2
    fi
done
if [ $ping_fail_count -eq 3 ];then
    echo "port is not active!"
fi 
【判斷linux下某個命令是否存在】
cmd=$1
command -v $cmd > /dev/null 2>&1 && ret=1 || ret=0
if [ $ret -eq 0 ];then
	echo "command is not found"
else
	echo "command is exist"
fi
【小數比較大小】
num1=$1
num2=$2
c=`echo "$num1"|awk 'BEGIN{FS="."} {print length($2)}'`
d=`echo "$num2"|awk 'BEGIN{FS="."} {print length($2)}'`
if [ $c -ge $d ];then 
tmp=$c
else
tmp=$d
fi
temp=1
for ((i = 0; i < $tmp;i ++));
do
temp=${temp}0
done
a1=`echo "$num1*$temp" |bc`
b1=`echo "$num2*$temp" |bc`
c=`echo "$a1"|awk 'BEGIN{FS="."} {print $1}'`
d=`echo "$b1"|awk 'BEGIN{FS="."} {print $1}'`
if [ $c -gt $d ];then
    echo "gt"
elif [ $c -eq $d ];then 
    echo "equal"
else    
    echo "lt"
fi
【去掉數字前面的0,比如去掉000081前面的0000】
a=$1
b=`expr $a + 0`
echo $b
【判斷遠端主機上檔案是否存在】
ssh_host="[email protected]$hostip"
mycnf="/data/data_3306/my.cnf"
if ssh $ssh_host test -e $mycnf;then 
	echo "exist"
else 
	echo "not exist"
fi

【linux shell互動yes or no】
while true; do
    read -p "請選擇繼續或退出(yes|no): " yn
    case $yn in
        yes ) break;;
         no ) exit;;
          * ) echo "Please input yes or no";;
    esac
done
【判斷IP地址是否合法】
ip=$1
valid_check=$(echo $ip|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if echo $ip|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then
    if [ ${valid_check:-no} == "yes" ]; then
        echo "$ip"
    else
        echo "ip $ip not available!"
    fi
else
       echo "ip format error!"
fi
【判斷IP是否可以ping通】
ip=$1
ping_fail_count=0
for ((i=1;i<=3;i++)); 
do
if ping -w 1 -c 1 $ip > /dev/null;then
    echo -e "$ip ping is successful."
    break
else
    echo "ping $i times fail"
    let ping_fail_count++
    sleep 1
fi
done
if [ $ping_fail_count -eq 3 ];then
    echo "$ip ping is failure!"
fi 
【獲取本機ip地址】
get_server_ip()
{
[ -e /etc/os-release ] && centos_version=`cat /etc/os-release|grep VERSION_ID|awk -F"=" '{print $2}'|sed 's/\"//g'`||centos_version=0
cat /proc/net/dev|tail -n +3|grep -v lo|awk -F: '{print $1}' > /tmp/cardlog
cat /tmp/cardlog | while read card
do
if [ $centos_version -eq 7 ];then
    server_ip=`ifconfig $card | grep -w "inet"|awk '{print $2}'`
else
    server_ip=`ifconfig $card | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}'`
fi
    if [ -z "$server_ip" ];then
        continue
    else
        echo $server_ip
        break
    fi
done
}
server_ip=$(get_server_ip)
echo "$server_ip"

相關推薦

常用shell指令碼片段

下面是本人工作中比較常用的shell指令碼片段,記錄下來,方便查詢使用。部分指令碼來源於網路並做了改進。 【判斷變數是否包含某字串】 key=$1 gre1="\033[42;30m" gre2

10 個實戰及面試常用 Shell 指令碼編寫

注意事項 1)開頭加直譯器:#!/bin/bash 2)語法縮排,使用四個空格;多加註釋說明。 3)命名建議規則:變數名大寫、區域性變數小寫,函式名小寫,名字體現出實際作用。 4)預設變數是全域性的,在函式中變數local指定為區域性變數,避免汙染其他作用域。 5)有兩個命令能幫助我除錯指令碼:set -e

10 個面試及實戰常用 Shell 指令碼

注意事項 1)開頭加直譯器:#!/bin/bash 2)語法縮排,使用四個空格;多加註釋說明。 3)命名建議規則:變數名大寫、區域性變數小寫,函式名小寫,名字體現出實際作用。 4)預設變數是全域性的,在函式中變數local指定為區域性變數,避免汙染其他作用域。 5)有兩個命令能幫助我除錯指令碼:se

8個實戰及常用Shell指令碼編寫

注意事項: 1).開頭加直譯器:#!/bin/bash 2).語法縮排,使用四個空格,多加註釋說明 3).命名建議規範:變數名大寫,區域性變數小寫,函式名小寫 4).預設變數是全域性的,函式中使用local指定區域性變數 5).除錯指令碼兩個命令:set -e遇

Linux常用Shell指令碼珍藏

我們在運維中,尤其是linux運維,都知道指令碼的重要性,指令碼會讓我們的 運維事半功倍,所以學會寫指令碼是我們每個linux運維必須學會的一門功課,這裡收藏linux運維常用的指令碼。如何學好指令碼,最關鍵的是就是大量的練習 和實踐。根據以下指令碼我們可以拓展,這樣我們提高

Linux運維常用shell指令碼之使用者管理例項

1、用shell指令碼批量建立Linux使用者 實現要求:建立使用者student1到student50,指定組為student組!而且每個使用者需要設定一個不同的密碼! #!/bin/bash for i in `seq 1 50` do     useradd -G

運維常用shell指令碼

1、用shell指令碼批量建立Linux使用者實現要求:建立使用者student1到student50,指定組為student組!而且每個使用者需要設定一個不同的密碼!指令碼實現如下:#!/bin/bashfor i in `seq 1 50`do    useradd -G

Linux常用shell指令碼

1.批量kill程序號eth='5668 5673 7733 7738 10512 10517 12453 12458 17134 17139 18075 18080 20340 20345 21120' for name in $eth do

shell 指令碼的一些常用命令 set, export, shell陣列,esac, tee,time

1. set Linux set命令用來設定 shell ,設定使用shell的執行方式。 引數說明 -a  標示已修改的變數,以供輸出至環境變數。 -b  使被中止的後臺程式立刻回報執行狀態。 -C  轉向所產生的檔案無法覆蓋已存在的檔案。 -d  She

shell指令碼常用處理

1.日期引數轉自定義格式(注意執行命令的符號 ` 和 ‘ 的區別) yes=$1 echo $yes mils=`date -d "$yes -1 day" +%s` #引數日期減一天轉毫秒 echo $mils yesterday=`date -d @$mils +%Y/%m/%d`

linux和shell指令碼常用命令技巧

date :調配時間,可以用date命令完成很多需求,比如日誌資料夾,比如求前幾天等等,其他常用方法百度 date "+%Y%m%d" #輸出年月日 date -d last-day +%Y%m%d #輸出當然日期的前一天 #########################

常用shell指令碼

"1.sh"的指令碼,接受引數。如下,如果有一個引數則賦值個sourceFile這個變數,否則用預設值。  Shell程式碼 1.     2. #!/bin/bash    3. LANG=en_US.UTF-8    4. #get parameters    5. sourceFile="/

shell指令碼常用總結

一. shell指令碼呼叫另一個指令碼的三種形式(網上摘錄) fork 形式: ./2.sh(預設) 執行的時候開一個sub-shell執行呼叫的指令碼,sub-shell執行的時候, parent-shell還在。 sub-shell執行完畢後返回

shell指令碼常用命令與方法總結

工作中shell指令碼,經常用的語法,整理了下 1 echo帶色的 列印字串帶色(31紅色,32綠色,33黃色,34藍色) 列印字串背景帶色 (40黑色,41紅色,42綠色,黃色43,藍色44,白色47) echo -e “\

Shell指令碼編寫常用——————持續更新

Linux指令碼 source命令與點命令 單純執行shell指令碼./a.sh,  並不能把指令碼中定義的變數匯入到父shell中, 必須用source的方式執行才可以 $0 $? $#... h

shell指令碼常用命令

1           Shell中的特殊符號 1.1           $  美元符號。用來表示變數的值。如變數NAME的值為Mike,則使用$NAME就可以得到“Mike”這個值。 1.2          #  井號。除了做為超級使用者的提示符之外,還可以在指

shell指令碼中字串常用操作整理

shell中常用字串操作整理 shell指令碼中常用字串操作如下: 1. 字串的比較 2. 字串的長度 3. 擷取字串 4. 字串的替換 下面分別講解這些操作的用法。 1. 字串的比較 1.1. 等於和不等於 user=zabbix # 這是最常用的 if [

sed && awk工具 及一些常用shell指令碼

(一)sed sed是一個精簡的、非互動式的流式編輯器,它在命令列中輸入編輯命令和指定檔名,然後在螢幕上檢視輸出。 逐行讀取檔案內容儲存在臨時緩衝區中,稱為“模式空間”(pattern space),

shell 指令碼程式設計常用命令

1、日期常用命令 date '+%Y%m%d%H%M%S' date '+%Y-%m-%d %H:%M:%S' -d '-1 day' 字串轉日期並作時間加減法 date -d "20130701 -i -1 month" +"%Y%m%d" 2、左補位 echo

shell指令碼 linux常用命令

ps -ef | 全格式顯示當前所有程序 grep xxx 濾出''xxx''的程序 grep