找出/etc/hosts 中含有IP 的文字列
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts
取出/etc/hosts 中含有IP 的部分
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts
用bash判斷字串是否為IPV4
if [ ` echo $ip | grep -E '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' | grep -o "\." | wc -l` -eq 3 ];
then
ipv4=true
else
ipv4=false
fi
參考來源:
sed -n 's/\(La\)/\1Oo/p' dataf3
把找到的 La 存起來,用 \1 取回來使用
sed -i 取代修改原始檔
參考來源: [Linux] sed replace 指令
for i in {0..6}; do
echo $i
done
for i in {a..z}; do
echo $i
done
參考來源: Armbian
$ cat test.sh
## Script parameters handling
for i in "$@"; do
if [[ $i == *=* ]]; then
parameter=${i%%=*}
value=${i##*=}
echo "Command line: setting $parameter to ${value:-(empty)}"
eval $parameter=$value
fi
done
$ test.sh KERNEL=new COLOR=red Loop=3 DEFAULT_VAR=
則在 test.sh 經過上面的for-loop 之後, 就會產生4個變數分別為:
KERNEL=new
COLOR=red
Loop=3
DEFAULT_VAR=
參考來源: Armbian
判斷是否已經安裝了'git' 套件, 若沒有, 則使用 apt-get 來安裝'git'
[[ $(dpkg-query -W -f='${db:Status-Abbrev}\n' git 2>/dev/null) != *ii* ]] && \
apt-get -qq -y --no-install-recommends install git
參考來源: Armbian
檢查是否有 root 權限, 若沒有, 則離開程式.
if [[ $EUID != 0 ]]; then
echo -e "[\e[0;35m warn \x1B[0m] This script requires root privileges"
sudo "$0" "$@"
exit $?
fi
參考來源: Armbian
find . -type d -name '.svn' | xargs rm -rf
同理, 也可以用來砍掉所有的.DS_Store 檔
find . -type f -name '.DS_Store' | xargs rm -f
砍掉所有的隱藏檔
find . -type f -name '.*' | xargs echo -rm -f
除了 .bash* 以外, 其他的隱藏檔全部砍掉
find . -type f -name '.*' | grep -v ".bash*" | xargs -rm -f
注意!! 這個方法對於含有空白字元的檔案或者目錄名稱無效
通常我們可以用 dirname $0 來取出此shell script 的路徑名稱. 但是這個路徑有可能是相對路徑. 但是有時候我想知道絕對路徑時, 該如何用呢?
如下範例:
假設 /dirA/dirB/the_schell.sh 內容如下
#!/bin/bash
DIR_PATH=$(dirname $0)
FULL_DIR_PATH=$(cd $(dirname $0) && pwd)
echo DIR_PATH=$DIR_PATH
echo FULL_DIR_PATH=$FULL_DIR_PATH
若我在/dirA 目錄下執行此程式
# cd /dirA
# ./dirB/the_shell.sh
DIR_PATH=./dirB
FULL_DIR_PATH=/dirA/dirB
直接看範例:
$ cat ./test.sh
#!/bin/bash
function add100 () {
local value1=$1
local result_var_name=$2
eval $result_var_name=$(($value1+100))
}
sum=0
add100 30 "sum"
echo result=$sum
$ ./test.sh
result=130
此範例 add100 函數 將運算結果 放入 sum 變數中
方法一
MODDATE=$(stat -c %y test.txt)
MODDATE=${MODDATE%% *}
echo $MODDATE
方法二
date -r test.txt +%F
用date 還可以取出日期+時間
date -r test.txt +'%Y-%m-%d %H:%M:%S'
參考來源: Get file modification date/time in Bash script
網路上找到兩種方法:
$ STR="hello"
$ HEXVAL=$(xxd -pu <<< "$STR")
$ echo "$HEXVAL"
6C6C6568A6F
$ HEXVAL=$(hexdump -e '"%X"' <<< "$STR")
$ echo "$HEXVAL"
6C6C6568A6F
參考來源: bash ascii to hex
直接看範例比較快:
#!/bin/bash
# 陣列共有3個元素
arr=("aaa" "bbb" "ccc")
# 算出陣列的MAX Index
maxidx=$((${#arr[@]}-1))
# 迴圈
for i in $(eval echo {0..$maxidx}); do
echo "i=$i"
echo "arr[${i}]=${arr[${i}]}"
done
執行結果如下:
i=0
arr[0]=aaa
i=1
arr[1]=bbb
i=2
arr[2]=ccc
重點就是在這行for i in $(eval echo {0..$maxidx})
參考來源: How do I iterate over a range of numbers defined by variables in Bash?
範例 script 如下:
#!/bin/bash
var1='AbcDef'
echo $var1 | tr '[:upper:]' '[:lower:]'
echo $var1 | tr '[:lower:]' '[:upper:]'
參考來源: String replacement (to lowercase) in Bash 4.3.33 - bad substitution error