標籤:shell隨記
-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於
seq 1 30 從1到30的數字
touch -mt201003030303.03 $Dir 修改目錄的時間格式
stat /tmp/1.dir 查看修改時間
LINES=`grep ‘^#‘ $file |wc -l`
echo "$file:$LINES" //可以用多個變數 取結果要用``賦值給變數
cat file.txt |tr -s ‘\n‘ 將多個連續的字元壓縮成單個字元
cat -n 顯示行號
cat file.txt |xargs -n 3 每行最大值為3個
line line line
line line line
line line
tr 可以進行替換,刪除,壓縮
tr ‘1‘ ‘2‘ 第一部分的被第二部分替換
echo "Hello who Is This" |tr ‘A-M,n-z‘ ‘a-m,N-Z‘ 大寫A-M n-z 替換成a-m,N-Z
tr -d 刪除字元
echo "hello 0980world" |tr -d ‘0-9‘
hello world
tr -c [set1][set2] 字元的補集 取反
echo -e "hello 0980 world" |tr -d -c ‘0-9\n‘
0980
tr -s 壓縮字元 (將連續多個字元壓縮成單個字元)
備份檔案
cp file.txt /tmp/filebak.txt;rm -rf file.txt
###########mysql################
select concat(uid,‘@‘,cname) as email,nickname,mobile,createdate,passwd from mop2oxdatabases
意思就是把mop2oxdatabases庫裡面的uid欄位,cname欄位整合成email欄位,提取每個欄位時,中間用逗號隔開
mysql -uroot -p -h 10.101.120.38 -P 3308 mop -e " " 命令列上的操作
dd命令
dd if=/dev/zero of=anbaoyu.data bs=1M count=1
/dev/zero 是泡泡機(吐資料的)
修改檔案的三個時間
touch -a 更改訪問時間
touch -mt 變更檔修改時間
touch -d 時間戳記
while 迴圈語句
1 while read line
do
echo $line
done<A.txt A只能為檔案,讀取檔案的行
<A.txt寫在最後相當於給 整個while do語句加了一個約束條件,讀取A裡每行至檔案尾結束
2 while read line <A
do
echo $line
done
<A寫在前邊,整個while do語句就沒有了約束條件,因為read line<A,這個始終為真(顯示第一行,死迴圈),表示不停的讀取第一行,賦值給line,然後列印參數
3 awk 列印多行資料
ls -l |awk ‘{print $1 ":" $7}‘ $1 $7之間用:隔開
awk ‘NR==m,NR==n‘ filename 列印從第m行到n行的範圍
4 要列印處於 ‘/start_pattern/,/end_pattern/‘ filename
例如:
$ cat section.txt
line with pattern1
line with pattern2
line with pattern3
line end with pattern4
line with pattern5
$ awk ‘/pa.*3/,/end/‘section.txt
line with pattern3
line end with pattern4
替換變數內容中的部分文本
$ var="this is a line of test"
$ echo ${var/line/REPLACED}
"this is a REPLACED of test"
查看網路上機器的狀態
#!/bin/bash
network="192.168.1"
for sitenu in $(seq 1 100)
do
(ping -c 1 -w 1 ${network}.${sitenu} &>/dev/null && echo ${network}.${sitenu} up || echo ${network}.${sitenu} down)&
done
&&前邊執行成功的話,繼續執行次操作
||前邊執行失敗的話,繼續執行次操作
可以翻譯成,如果1 ,那麼2,否則3
原理()& 將任務放入後台操作;每次ping都非常慢,-w 延遲1秒
wait 放在指令碼最後,它就會一直等到所有的子進程全部結束
netstat -tnp |grep 服務進程 列出開放連接埠與服務
統計硬碟使用方式
df -h disk free 磁碟使用方式
du -sh usage 檔案和目錄大小
du -a dir 遞迴顯示所有檔案的磁碟使用方式
尋找大檔案
find . -type f -exec du -k {}\;|sort -nrk 1 |head
.目前的目錄
sort -nrk -n 依照數值大小排序
-r 相反的順序排序
-k 選那塊地區進行排序
-t 指定分隔字元
-f 忽略大小寫
-b 忽略每行前面開始出的空白字元
指令碼中使用密碼問題:
使用前expect前,需要安裝兩個rpm包,下載http://download.csdn.net/detail/wang7dao/4416172
# rpm -ihv expect-5.43.0-8.el5.i386.rpm
# rpm -ihv expect-devel-5.43.0-8.el5.i386.rpm
#!/usr/bin/expect -f
set password 123456
#download
spawn scp [email protected]:/root/a.wmv /home/yangyz/
set timeout 300
expect "[email protected]‘s password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
#upload
spawn scp /home/yangyz/abc.sql [email protected]:/root/test.sql
set timeout 300
expect "[email protected]‘s password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
#:expect a.sh
http://down.51cto.com/data/1866892
常用shell符號:
我們先寫一個簡單的指令碼,執行以後再解釋各個變數的意義
# touch variable
# vi variable
指令碼內容如下:
#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:[email protected]"
echo "show parm list:$*"
echo "show process id:$$"
echo "show precomm stat: $?"
儲存退出
賦予指令碼執行許可權
# chmod +x variable
執行指令碼
# ./variable aa bb
number:2
scname:./variable
first:aa
second:bb
argume:aa bb
show parm list:aa bb
show process id:24544
show precomm stat:0
通過顯示結果可以看到:
$# 是傳給指令碼的參數個數
$0 是指令碼本身的名字
$1 是傳遞給該shell指令碼的第一個參數
$2 是傳遞給該shell指令碼的第二個參數
[email protected] 是傳給指令碼的所有參數的列表
$* 是以一個單字串顯示所有向指令碼傳遞的參數,與位置變數不同,參數可超過9個
$$ 是指令碼啟動並執行當前進程ID號
$? 是顯示最後命令的退出狀態,0表示沒有錯誤,其他表示有錯誤
shell 中調用另一個指令碼的三種方法:
1 fork /directory/script.sh 如果shell中包含執行命令,那麼子命令並不影響父級的命令,在子命令執行完後再執行父命令
(子命令環境變數不會影響到父級)
啟動並執行時候會開一個sub-shell的呼叫指令碼
2 exec /directory/script.sh 執行子命令的命令後,不再執行父級的命令
3 source /directory/script.sh 執行子級命令後繼續執行父級命令,同時子級設定環境變數會影響到父級環境變數
(調用的指令碼中聲明的變數和環境變數,都可以在主指令碼中使用)
隨記:
1 ^# 以#開頭
^$ 表示空格
[[:space:]] 精確表示空格
2 set -x 跟蹤執行 看到shell執行的過程
3 cp $file /tmp/$file-`date +%F` 複製檔案並以目前時間改名
4 顯示使用者名稱,ID,shell時候
echo "user:$username ID:$Uid shell:$shell"
然後再分別給予變數賦值
過濾的時候
a:可以用grep 關鍵字
b:head -6 file |tail -1 第幾行
cut -d : -f 3
id -gn tom 顯示tom使用者的組名
8 @@@@重要
列表的產生方式
a 逐個給出 /etc/fstab /etc/inittab
b 使用萬用字元 for File in /var/*
c 使用命令產生列表 (一般為相對路徑)
#!/bin/bash
for File in `ls /var` ;do
file /var/$File
done
d 產生數字序列
{}:{起始數字..結束數字} 例如{1..100}表示從1到100之間的所有正整數
`seq[起始數字][步長][結束數字]`
例:seq 1 2 100 表示從1到100之間以2個單位輸出
8 for 迴圈是一個一個讀取 迴圈次數是按照變數的個數迴圈的
9算術運算的實現方式:expression:運算方式
$[expression] 例:echo $[$a+$b] --------常用
$((expression)) 例:$(($a+$b))
let expression 例:letE=$a+$b echo $E
expr expression 例:F=`expr $a+$b`
10 Count=0
Count=$[$Count+1]
echo "total file:$Count" //檔案的總和
11 `seq 1 2 100` 列表以奇數
`seq 2 2 100` 列表以偶數
12 IDsum=0 id的總和
Evensum=0 奇數的總和 //變數的前提
IDsum=$[$IDsum+$i] $i是一個變數數字 //變數主體部分
+1 就是遞增的變化
echo "$IDsum" 顯示變數的總和 //變數的結果
shell臨時筆記