增删改查 字元串
#sed參數: a 新增; c 替換; d 删除; i 插入; p 列印; s 取代
---------- 新增指定字元位置 ----------
sed -i '/admin/axxxxxxx' passwd
# 指定位置的後面增加一行内容為:xxxxxx
# passwd 是檔案
# 使用符号 \ 進行轉譯特殊字元
# 網址中的 http:// 轉譯為: http:/\/\
sed -i '/admin/i1111n 2222 n 3333' passwd
# 前面增加多行内容
# \n 換行
sed -i '$a xxxxn11111n22222' 1.sh
# $最後一行,a 插入字元xxxx
# \n 換行,插入多行字元
sed -i G 1.txt # 每行後面增加空行
# 'G;G' 增加兩行空行
echo "
111
333
" >> 1.sh # 使用 echo 直接換行追加字元到文本
sed -i "s/^/https://g" 1.txt
# 每行行首增加字元串 ^ 符号是行首; $ 符号是行尾
# "s/^/xxx/g" 其中s是修改,g是開啟特殊字元轉譯,
# 符号 \ 指定需要轉譯 :// 符号不被解析
sed -i '/./{s/^/eisc/;s/$/eisc/}' 1.txt
# 這是一個組合,行首與行尾都需要分别添加
---------- 删除指定字元位置的行 --------
sed -i "/^f/d" txt.t # txt.t中以f開頭的一行
# 符号 ^ 開頭,不加 ^ 為包含有這個字元
# '/^\s*$/d' 删除所有空行
sed -i '/^$/d' test.txt # 删除空行
sed -i 's/[ ]*//g' test.txt # 剔除空格
s/[[:space:]]//g # 删除所有空格
's/[ \t]*$//g' # 删除行末空格
A=$(sed -n '$=' 1.sh) ; sed -i $(($A-3+1)),${A}d 1.sh
# 删除最後三行
# sed -n 顯示行号,$ 最後一行行号的數字
# $(($A-3+1)) 計算開始删除的行号位置
# ${A}d 最後一行,删除的結束位置
# 删除部分字元:使用下面的修改為空格即可
---------- 修改指定字元 ---------
!/bin/bash
sed -i -e 's/^a.*/'======已修改aaaaa====='/g' \
# -e 修改多個, ^ 開頭符号(開頭為a字元的) .* 後面的所有内容 \ 多行換行
-e 's/^b.*/'======已修改bbbbb====='/g' 3.txt
# 要操作的檔案為:3.txt
sed -i "s/echo/xxx/g"
grep "echo" -rl /root/1.sh
#"s/原字元串/新字元串/g"
# `grep "原字元串" -rl 所在目錄`
# 目前是使用的雙引号,xxx也可以是變量 $a
--------- 檢視比對字元所在行的所有字元串 ------
grep -r admin passwd |awk -F = '{print $0}'
# 在passwd 檔案裡面的 admin 字元所在的行
# awk 字段處理, $0 目前行的所有列(全部)
grep -v abc # grep 不比對字元串
-------------------- 腳本操作檔案 ----------------------------
aa="/root/d" # 定義變量為一個目錄
for bb in $aa/* ; do # 将 aa 的值賦給 bb 繼承
if [ -d $bb ]; then # if 判斷 $bb 變量是目錄,然後就:
# -d 目錄
rm -rf $bb # 删除一個目錄下所有的檔案
fi # fi 結束
done
direc="/root/d" # 定義direc變量 的值為目錄
for dir2del in $direc/* ; do
# dir2del in 是 變量$direc 的值
if [ -d $dir2del ]; then # 判斷 $dir2del 是目錄,然後就
rm -rf $dir2del # 清空檔案夾
fi
!/bin/sh
cat "/root/1.txt" | while read line; do
# 檢視檔案内容,并将它指派給變量 line
echo $line; # 以系統預設編碼來列印
讀取檔案屬性
if elif else
用來判斷檔案的參數:
-r 可讀 -b塊裝置檔案 -c 字元裝置 -d 目錄 -f 普通檔案 -g SGID位 -k站着位stick bit
-p 管道 -u SUID -r 可讀 -w 可寫 -x 執行 -s 檔案為空 -e 檔案存在
邏輯判斷:
相等 -eq 不相等 -ne 大于 -gt 大等于 -ge 小于 -lt 小等于 -le
非運算 ! 或運算 -o 與運算 -a
file=${file:?'必須給出參數'}
file=1.sh # 給變量指派為一個檔案
file=$file # 将參字元串指派給變量
if [ ! -e $file ]; then # 判斷 ! -e 不存在檔案,然後就
echo "$file 不存在" # 列印字元串
exit 1 # 檔案不存在就退出程式,不向下執行
fi # if 和 fi 開始與結束
if [ -d $file ]; then # 判斷變量$file -d 是檔案夾,然後就
echo "$file 是一個目錄" # 列印字元串
if [ -x $file ]; then # 判斷變量 -x 執行,然後就
echo "可以"
else
echo "不可以"
fi
echo "對此進行搜尋" # echo 列印變量
elif [ -f $file ]; then # 循環語句 if elif else
# -f 是普通檔案,然後就
echo "$file 是一個正規檔案"
else # else 其他的情況
echo "$file不是一個正規檔案"
if [ -O $file ]; then # -O 使用者組
echo "你是$file的擁有者"
else
echo "你不是$file的擁有者"
if [ -r $file ]; then # -r 可讀
echo "你對$file擁有"
echo "你并不對$file擁有"
echo "可讀權限" # 連接配接列印:上一條和本條資訊順序連在一起了
if [ -w $file ]; then # -w 可讀
echo "你對$file擁有"
echo "你并不對$file擁有"
echo "可寫權限"
if [ -x $file -a ! -d $file ]; then # -x 可執行
echo "你擁有對$file"
echo "你并不擁有對$file"
echo "可執行的權限"
寫入檔案屬性
通過chattr指令修改屬性能夠提高系統的安全性,但是它并不适合所有的目錄。chattr指令不能保護/、/dev、/tmp、/var目錄。
chattr [-RV] [-+=AacDdijsSu] [-v version] 檔案或目錄
-R:遞歸所有子目錄 -V:詳細顯示修改内容
-:失效屬性。 +:激活屬性。
= :指定屬性。 A:Atime 不要修改檔案的最後通路時間
S:Sync 寫到磁盤 a:Append Only,系統隻允許追加資料
i:Immutable 不允許修改 D:檢查壓縮檔案中的錯誤。
d:No dump 備份時忽略檔案 C:Compress 系統以透明的方式壓縮這個檔案
S:Secure Delete 删除時用0填充 u:Undelete 删除這個檔案,系統會保留其資料
chattr +i /etc/resolv.conf # +i 防止修改
lsattr /etc/resolv.conf # 檢視檔案屬性
chattr +a /var/log/messages # +a隻能追加資料
12.枚舉一個目錄中的所有檔案夾
OLDIFS=$IFS
IFS=:
for path in $( find "%%1" -type d -printf "%p$IFS")
do
"$path"
IFS=$OLDIFS
14.複制一個目錄下所有的檔案夾到另一個目錄下
direc="%%1" #$(pwd)
for dir2cp in $direc/* ; do
if [ -d $dir2cp ]; then
cp $dir2cp "%%2"
16.移動一個目錄下所有的檔案夾到另一個目錄下
for dir2mv in $direc/* ; do
if [ -d $dir2mv ]; then
mv $dir2mv "%%2"
17.以一個檔案夾的架構在另一個目錄下建立檔案夾和空檔案
for path in $( find $direc -type d -printf "%p$IFS")
mkdir -p "%%2/${path:${#direc}+1}"
cp -a "%%1" "%%2"
表達式
1,取得字元串長度和位置
string=abc12342341 # 指派一個變量
echo ${#string} # 響應變量的長度
expr length $string # 響應變量的長度
expr "$string" : ".*" # 結果11 字元串所在位置
expr index $string '1' # 結果4 字元串對應的下标是從0開始
2,字元串截取
echo ${string:4} # 從第4位開始截取後面所有字元串
echo ${string:3:3} # 從第3位開始截取後面3位
echo ${string:3:6} # 從第3位開始截取後面6位
echo ${string: -4} # :右邊有空格 截取後4位
echo ${string:(-4)} # 同上後四位
expr substr $string 3 3 # 從第3位開始截取後面3位
6,截取不比對的内容:去掉比對到的内容
echo ${string#a*3} # 42341 從$string左邊開始,去掉最短比對子串
echo ${string#c*3} # abc12342341 這樣什麼也沒有比對到
echo ${string#c13} # 42341 從$string左邊開始,去掉最短比對子串
echo ${string##a*3} # 41 從$string左邊開始,去掉最長比對子串
echo ${string%3*1} # abc12342 從$string右邊開始,去掉最短比對子串
echo ${string%%3*1} # abc12 從$string右邊開始
7,比對并且替換
echo ${string/23/bb} # 将變量中的23 替換為 bb
echo ${string//23/bb} # 雙斜杠替換所有比對
echo ${string/#abc/bb} # #号以什麼開頭來比對,根php中的^有點像
echo ${string/%41/bb} # %以什麼結尾來比對,根php中的$有點像