一些常用的shell指令碼命令和用法

2021-08-21 03:21:53 字數 4788 閱讀 2968

$#:代表命令列引數個數

$*:代表所有引數

$n:第n個引數

$?:代表最後乙個命令返回值

$$:代表當前shell的程序號pid

$是變數的引用符

= 是最基本的賦值

:= 是覆蓋之前的值

?= 是如果沒有被賦值過就賦予等號後面的值

+= 是新增等號後面的值

declare -a array //陣列

declare -i sum=10+20 //整型

declare -x var //定義為環境變數

declare -r var=456 //定義為唯讀的變數 不能用unset

-x read 時顯示指令碼執行的過程(用於除錯) 執行指令碼時也可加-x

-t read -t 2 tmp 2秒鐘超時

-n read -n 3 tmp 讀入3個字元自動返回

-p read -p "please input " <<====> echo -n "please input : "

-s read -p "please input :" -s passwd 以密碼形式讀入

declare -i score //定義乙個變數

read -p "input a int score:" score

echo -n "hello world" 不輸出回車符

echo -e "\033[31mking\033[0m" 支援終端控制碼命令m顏色屬性

30--37前景色

40-----47 背景色

\033[0m恢復預設顏色屬性

\033[45;36m設定背景為45前景為36

"\033[y;xh \033[10;25h" 把游標置於10行25列處

\033[k 清除游標行的內容

\033[u 恢復游標位

\033[s 儲存當前游標位

// 與檔案存在與否的判斷

-e 是否存在

-f 是否為普通檔案

-d 是否為目錄

-s 是否為非空的檔案

-p 是否為管道檔案

-b 是否為塊裝置檔案

-c 是否為字元裝置檔案

-l 是否為軟鏈結

-s 是否socket檔案

//與檔案許可權有關的判斷

-r 是否有可讀的許可權

-w 是否有可寫的許可權

-x 是否有可執行許可權

-u 是否有特權位

-g 是否有組特權位

-k 是否有t位,即貼上位

//兩個檔案的比較判斷

-nt 比較file1比file2新

-ot 比較file1比file2舊

-ef 比較file1和file2是否為同乙個檔案,一般用於判斷硬鏈結

//整數之間的大小判斷

-eq 相等

-ne 不等於

-gt 大於

-ge 大於等於

-lt 小於

-le 小於等於

//字串之間的判斷

-z 是否為空字串

-n 是否為非空字串

str1 = str2 是否相等

str1 != str2 是否不等

test -d file 測試是否為目錄

test -e file 是否存在

test -s file 檔案大小是否不為0

//多重條件判斷

-a 兩個條件同時滿足,就為真,相當於and

-o 兩個條件滿足其一,就為真,相當於or

(()) 也可判斷和test一樣,可以直接使用比較符號,支援c語言格式

$var 引用var變數的值

$ 引用var變數的值

$ 引用var變數的值並且擷取a左邊的字串顯示,如果字串有多個a,則按從左向右最後乙個a擷取

$ 引用var變數的值並且擷取a左邊的字串顯示,如果字串有多個a,則按從左向右第乙個a擷取

$ 引用var變數的值並且擷取a右邊的字串顯示,如果字串有多個a,則按從左向右第乙個a擷取

$ 引用var變數的值並且擷取a右邊的字串顯示,如果字串有多個a,則按從左向右最後乙個a擷取

$ 引用var變數的值並且從第3個字元開始擷取

$ 引用var變數的值並且從第3個字元開始擷取,擷取6個字元顯示

$ 返回var變數值的長度

$ 替換變數值的字串,這裡是把var變數值裡的a換成b,如果有多個a也只能換一次

$ 替換變數值的字串,這裡把var變數值裡的a全換成b

if test 6 -eq 5 -a 7 -gt 8

if [ 6 -eq 5 ] && [ 7 -gt 8 ]

if [ 6 -eq 6 -a 9 -gt 8 ]

if test 6 -eq 5

if ((6==5))

if test $score -lt 0 -o $score -gt //100小於0或者大於100

用法:

len=$
expr length "this is a test"
14 //輸出

expr 14 % 9
5 //輸出

expr substr "this is a test" 3 5 //遇到空格停止
is is //輸出

expr index "testforthegame" e
2 //輸出

num=$(($random % 1000))
expr $num + 100 &> /dev/null //不顯示任何東西

if [ $? -ne 0 ]

then

echo "input error!"

exit 1

fi

#!/bin/bash

if [ $? -ne 0 ]

then

echo "user nonexistent"

exit 1

fiecho "$uid"

exit 0

#-n表示位數

read -p "input a key:" :-n 1 key

#./***.sh /var/ftp/pub/ttt.txt

if [ $# -ne 1 ]

then

echo -e "\033[31muse:$0 filepath\033[0m"

exit 1

fi#是否存在 '!'取假

fname=$1

if ! test -e $fname

then

echo -e "\033[31m$fname is not exist\033[0m"

exit 2

fi#判度是否為普通檔案

if [ -f $fname ] #if test -f $fname

then

#判斷是否為空檔案

if ! test -s $fname

then

rm -rf $fname

if [ $? -eq 0 ]

then

echo "$fname is empty file,del..."

fifi

else

echo "is not file!!!"

fiexit 0

read -p "input a ip:" ip

#檢查ip是否合法

ping -c 1 $ip &> /dev/null

if [ $? -eq 0 ]

then

echo "yes."

else

echo "no."

fi

read -p "input a int number:" num

len=$

for i in $(seq 0 $((len-1)))

don=$

case $n in

[[:digit:]])

;;*)

echo "input error!!!"

exit 1

;;esac

done

#!/bin/bash

files='ls ./*.txt'

for txt in $files

do     doc='echo $txt | sed "s/.txt/.doc"'

mv  $txt  $doc

done

#! /bin/bash

dirname='ls /root| grep bak'

if [ -z "$dirname" ]

then

mkdir /root/bak

cd /root/bak

fiyy='date % y'

mm='date % m'

dd='date % d'

backetc=$yy$mm$dd_etc.tar.gz

tar -zcvf $backetc /etc

echo "finished!"

kafka的一些指令碼命令

1.啟動kafka服務 啟動zookeeper bin zookeeper server start.sh config zookeeper.properties 啟動kafka bin kafka server start.sh config server.properties 2.建立乙個主題 ...

常用Shell指令碼命令 備忘

此處紀錄一些個人常用的shell命令,留作復用 docker start 映象id docker stop 容器id docker rm 容器id docker rmi docker images awk 1 shell dir home yan code shell dmc echo e 033 ...

一些常用的基本命令

一些常用的基本命令 uname a 檢視核心版本 ls al 顯示所有檔案的屬性 pwd 顯示當前路徑 cd 返回上一次目錄 cd 返回主目錄 date s 設定時間 日期 cal 顯示日曆 cal 2006 bc 計算器具 man info 幫助手冊 locale 顯示當前字型 locale a ...