shell基礎(自己看視頻寫的,不是特別全)

創建一個shell腳本

1.理清任務過程
2.整理執行語句
3.完善任務結構
例:創建一個用戶

vi useradd.sh
#!/bin/bash
#useradd zhao
echo "創建zhao用戶"
useradd zhao
echo "爲用戶創建密碼"
echo 1233456 |passwd --stdin zhao
echo "創建完成"

保存即可。
執行腳本的方法
1.chmod +x useradd.sh
2.sh useradd.sh 或者bash useradd.sh
3.source useradd.sh


標準錯誤輸出: 2> 2>> 
例:cat 1.txt 2.txt 2> 3.txt(不會顯示錯誤的命令輸出,會將錯誤命令執行後的信息輸入到3.txt文件中)
混合輸出:&> &>>
例:mkdir 1.txt 1.txt &>>3.txt(不會將正常執行和錯誤執行輸出到屏幕,但會執行正常操作的命令。會保存到3.txt中)

處理多條命令之間的邏輯關係:
邏輯與: && →前邊命令執行成功後,纔會執行後邊的命令 
例:【root@localhost~】mkdir 1.txt &&mkdir 2.txt
邏輯或:|| →只有一條命令執行成功即可。例:mkdir 1.txt||mkdir 2.txt(1.txt創建成功後將不會在執行2.txt)
順序執行:; →先執行命令1,在執行命令後。成功失敗都執行 例:mkdir 1.txt ;mkdir 2.txt


 變量的基本操作
定義及賦值
格式:變量名=變量值
例:x=1
引用變量
格式:echo $x、echo ${x}
echo $i
1
echo ${x}

雙引號/單引號/反撇號
雙引號:允許引用,轉義
例:echo “$x”
1
單引號:不允許引用、轉義
echo ‘$x’
$x
反撇號或者$() :以命令輸出進行替換
var=`uname -r`
echo $var
2.6.18-194.e15

 

常見的環境變量
env命令:輸出所有環境變量
系統賦值:USER(記錄當前用戶的名稱)LOGNAME(用戶登錄時候的名稱)HOME(宿主目錄)SHELL(用戶使用的shell解釋器)
用戶操作:PATH (用戶搜索路徑)LANG(當前使用的語言)CLASSPATH(裝java環境使用)

其他特殊命令
由系統或腳本操作,不可直接賦值
$?:前一條命令的狀態,0表示正常,非0表示不正常
$0:腳本自身的程序名
$1~$9:第1-第9個位置參數
$*:命令行的所有位置參數
$#:命令行的位置參數個數
例:vi 11.sh
#!/bin/bash
ehco "本程序名:$0"
ehco "執行時一共輸入:$#"
ehco "其中第一個參數是:$1"
ehco "所有的參數:$*"
保存
./11.sh hello word
本程序名 11.sh
執行時一共執行了2個
其中第一個參數是 hello
所有的參數是 hello word


整數運算操作
使用expr命令,計算表達式
例:expr 1 + 1  注意:在算乘法*的時候,需要轉義一下 例:expr 1\*2(因爲*表示通配符)
2
使用$[]表達式,算式替換
echo $[1+1]
2
echo $[1-1]
0
echo $[1*2] (算乘法的時候,不用再加\)
2
echo $[1/2]
0.5
echo $[1%2]

x=1;y=2
echo [y-x]


變量的遞更處理
格式:let 變量名++、 let變量名--
例:x=1;let x++;echo $x
2
y=2;let x--;echo $x
0
要是想加的不是1.
例:x=1;let x+=2;echo $x
3


使用隨機數
RANDOM
例:echo $RANDOM
15321
echo $[RANDOW]
小於100 echo$[RANDOW%100]
86
生成數字序列(seq)
格式:seq 首數 末數 
例:seq 1 3
1
2
3
要是從1開始可以省略
seq 3
1
2
3
seq 首數 增量 末數
seq 1 3 8 (每次加3)
1
4
7


小數運算操作
將表達式給bc命令執行
expr “43.56-43.21”|bc
0.35
expr "scale=4;10/3" |bc (scale:限制小數位數爲4)
3.3333


徑分割
dirname basename
使用expr命令
格式:expr substr $Var1 起始位置 截取長度
使用${}表達式
格式${var1:起始位置:截取長度}
例:echo ${ver1:1:4}
echo ${ver1::4}
var1=/etc/httpd/conf/httpd.conf
dirname $var1
/etc/httpd/conf/
basename $var1
httpd.conf
var1=beidaqingniao
expr substr $var1 4 6 //注意:截取長度從1開始
daqing
echo ${var1:4:6}    //注意:截取長度從0開始
aqingn

echo ${var1::4}    //如果從1開始,1是可以省略的 

 

字符串替換
使用${}表達式
格式1:${var1/old/n}
格式2:${var1//old/n}
例:var1=oldaold
${var1/old/n}
naold
${var1//old/n}
nan

 

如何獲取隨機字符串
提供隨機的設備
/dev/urandom
.md5轉換
/usr/bin/md5sum
字符串切割
/bin/cut


隨機字符--ASCLL字符
head -l /dev/urandom |md5sum
使用cut切割字符串
var1=beidaqingniao
echo $var1 |cut -b 起始位置-結束位置  //位置爲首尾時可省略

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章