Shell 指令碼學習1

2021-09-25 00:17:05 字數 4294 閱讀 4689

目錄

1.批量生成

2.批量修改

3. 批量生產使用者

4. 生產隨機密碼

5. 批量判斷網路10.0.0.內的主機是否通訊

6.sed 命令使用

7.gawk 命令使用

8.gawk 正規表示式

9.sed 單詞替換空白行處理

10.sed 處理文字反轉指令碼

11.sed 清除html標籤

12. $特殊字元含義

13.for 迴圈 使用注意

[ -d ./oldboy ] || mkdir ./oldboy

cd ./oldboy

echo $(pwd) && \

#此處的單引號是電腦鍵盤左上角上的點

for i in `seq 1 10`

do filename=$(uuidgen|tr '0-9' 'a-z' |cut -c 1-10)

touch $_oldboy.html

done

#檔案目錄的組成

dir=$(pwd)/oldboy

echo "$dir"

if [ ! -d "$dir" ]

then

echo "$dir not exist"

return exit 0

ficd $dir && \

for i in $(ls *html)

doranstr=$(echo $i| cut -c -10)

mv $i $_oldgirl.html

done

[ -d ./oldboy ] || mkdir ./oldboy

cd ./oldboy

echo $(pwd) && \

source /etc/init.d/functions

#定位到action的執行

for i in oldboy

do useradd $i &>/dev/null# &> 等於2 也就是stderr, > 等於1 stdout

if [ $? -eq 0 ];#上一句執行結果

then

#表示使用者新增成功 顯示ok 綠色

#uuidgen 生成隨機密碼,擷取數字為小寫字母 取10個字元

action "$i" /bin/true

echo $(uuidgen|tr '0-9' 'a-z' | cut -c 1-10)|passwd --stdin $i &>/dev/null

echo $i $(uuidgen|tr '0-9' 'a-z' | cut -c 1-10) >>/tmp/passwd.txt

else

#表示使用者新增失敗 顯示 false 紅色

action "$i" /bin/false

fidone

日期和隨機數生成md5 值,取隨機的1-8個字元

randompass="`date`$random"|md5sum|cut -c 1-8

echo $

#生成16進製制密碼

uuidgen

#程序id版本,數字密碼

echo $$

#!/bin/bash

source /etc/init.d/functions

#source 命令也可使用 . /etc/init.d/functions 命令來匯入功能函式庫

for i in 10.0.0.do&

done

#!/bin/bash

#test sed command

sed -e 's/brown/green/;s/dog/cat/' data1

#data1 為檔名

#-e 表示多條命令 命令之間用「;」隔開,不允許有空格

#s 命令替換 brown為green,dog為cat,即第乙個斜槓內容替換為第二個斜槓內容

#!/bin/bash

gawk -f: -f script1 /etc/passwd

#-f: 選項表示內容每行分割符是:

#-f script1 指定讀取script1檔案中的命令

#script1檔案內容

#/etc/passwd 為處理的目標檔案

#!/bin/bash

# exercise the regular expression

#匹配email位址

gawk --re-interval '/^([a-za-z0-9_\-\.\+]+)@([a-za-z0-9_\-\.]+)\.([a-za-z])$/'

#^([a-za-z0-9_\-\.\+]+) 匹配字母數字加 _ - . + 特殊字元用轉義 \ 之後+至少一次

#([a-za-z0-9_\-\.]+)\. 網域名稱部分也是一樣匹配

#頂級網域名稱([a-za-z])$ 以字母為主,2到5個字元

#匹配美國**號碼

gawk --re-interval '/^\(?[2-9][0-9]\)?(| |-|\.)[0-9]( |-|\.)[0-9]$/'

#**號碼格式 (123)-555-890

#^\(? 開頭匹配左括號 一次或沒有

#[2-9][0-9] 要求第乙個數字是2-9之間數字,後面跟兩個數字

#\)? 匹配開頭右邊括號一次或沒有

#(| |-|\.) 後面跟個空格 - 或 . 特殊字元

#[0-9] 匹配3個數字

#( |-|\.) 匹配空格或 - 或 . 特殊字元

#[0-9]$ 結尾匹配4個數字

#!/bin/bash

:<]*>//g;/^$/d' data3

# 中間用[^>] 來保證標籤匹配的正確性

#/^$/d用來刪除空白行

#data3 內容

:information for us to use in our shell script.

!

$0 表示指令碼名稱

$1 表示第乙個引數 $2 表示第二個引數 $3 表示第三個引數

$@ 表示所有引數為字串列表

$* 表示所有引數為乙個字串

#舉例./t.sh 1 2 3 執行,$@ ** "1" "2" "3" ,$*表示 「1 2 3」

#$@ 在for 不帶 in [list] 時是其預設選項, 舉例

for option

do echo $option

done

#以上指令碼就依次讀取指令碼執行是指定的引數了

$? 表示上一條指令碼命令執行的結果,退出碼

#一般 if [ $? eq 0 ]; then echo "excute successed!" 判斷上一條命令是否執行成功

$$ 表示指令碼執行時的pid

t.sh 檔案內容

#!/bin/bash

for option

do echo $option

done

#當 for 不使用 in [list] 預設 使用$@ 讀取預設引數列表

#具體執**況如下

./t.sh 1 2 3

#輸出123

#此種情況 $@ 表示"1" "2" "3" , $* 表示 「1 2 3」

cat << end

hello

world

end#cat << end 就是 把 cat << end end 之間的內容輸出到螢幕,end 沒有特殊意思,只是使用而已,

#也可以用其他字元,如 content

#cat << 這種用法可以參考 here documents

#!/bin/bash

read -p "input yes:" help

#read -p 提示讀取螢幕資訊到help 變數,加上選項-s 表示讀取的輸入資訊不再螢幕顯示,一般用於

#讀取使用者密碼如 read -p "input your password:" -s pass

if [ $help = yes ]; then

cat << content

hello

--help

--prefix=path

--sbin-path=path

--lock-path=path

content

fi

shell指令碼學習1

在工作的時候接觸到了shell指令碼,不過我沒有自己寫過,但是又因為當時對shell有了興趣,所以我就抽了一點時間,來學習shell指令碼的語法結構,這裡只是基本的shell語法,更高深的在以後可能會接觸。一 shell分類 1 bourne家族 sh,bash 標準shell pshell,zsh...

shell指令碼學習(1)

vim shell name.sh 指令碼名要切合實際,見名思意 指令碼第一行 bin bash 表示指令碼以bash解釋,指定shell解釋 bin bash command1 command2 command3 依照命令的先後從上往下執行.shell name.sh 以這種方式執行shell指令...

Shell指令碼學習(1)

1 啟動shell shell是乙個可以互動訪問的linux系統程式,他的執行與普通程式相同,系統啟動的shell取決於使用者id的配置 2 shell提示符 為預設提示符 a 鈴聲字元 d 格式為 日月年 的日期 e ascii轉義字元 h 本地主機名 h 完全合格的限定域主機名 j shell當...