LINUX
BASH
hello="A B C D"
echo "$hello" # A B C D
echo '$hello' # $hello
單引用作用將會導致"$"被解釋爲單獨的字符,而不是變量前綴.
c=`ls -l` # 把'ls -l'的結果賦值給'a'
1. echo $c #然而, 如果沒有引號的話將會刪除ls結果中多餘的tab和換行符.
2. echo "$c" #如果加上引號的話, 那麼就會保留ls結果中的空白符.
1. #!/bin/bash
2. for i in 7 9 2 4 5 12
3. do
4. echo $i
5. done | sort -n
6. exit 0
1. #!/bin/bash
2. # 從/etc/fstab中讀行.
3. File=/etc/fstab
4. {
5. read line1
6. read line2
7. } < $File
8. echo "First line in $File is:"
9. echo "$line1"
10. echo "Second line in $File is:"
11. echo "$line2"
1. # 從/etc/fstab中讀行.
2. File=/etc/fstab
3. {
4. read line1
5. read line2
6. } < $File
例2-8: 將所有查找到的文件(在工作目錄下過去24小時內修改過的文件)打一個包
1. #!/bin/bash
2. tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
將一個文件描述符輸出到另一個文件描述符
1. #!/bin/bash
2. exec 4>out.txt
3. exec 5>&4
4. date 1>&5
* 設置只讀變量 $ var=value
$ readonly var #此時var只可進行讀操作,不可修改
$ readonly #直接輸入readonly,顯示所有隻讀變量
[root@redflag ~]# read [-pt] variable
-p:後面接提示字符
-t: 後面可以接等待的秒數。
例如:
[root@redflag ~]# read -p "Please keyin your name: " -t 30 named
1) ${var:-value}:如果變量var未定義,返回一個默認值。
如果var存在且非空,則表達式${var:-value}的值爲$var;如果var未定義,則表達式值${var:-value}爲value
變量設置方式 |
str沒有值 |
str爲空字符串 |
Str已設置爲非空字符串 |
|
var=${str-expr} |
var=expr |
var= |
var=$str |
|
var=${str:-expr} |
var=expr |
var=expr |
var=$str |
|
var=${str+expr} |
var= |
var=expr |
var=expr |
|
var=${str:+expr} |
var= |
var= |
var=expr |
|
var=${str=expr} |
str=expr var=expr |
str 不變 var= |
str 不變 var=$str |
|
var=${str:=expr} |
str=expr var=expr |
str=expr var=expr |
str 不變 var=$str |
|
var=${str?expr} |
expr輸出至stderr |
var= |
var=$str |
|
var=${str:?expr} |
expr輸出至stderr |
expr輸出至stderr |
var=$str |
|
|
|
|
|
|
量的設置方式 |
說明 |
|||
${變量名#關鍵字} |
若變量從頭開始符合關鍵字,則將符合的最短內容刪除 |
|||
${變量名##關鍵字} |
若變量內容從頭開始符合關鍵字,則將符合的最長內容刪除 |
|||
${變量名%關鍵字} |
若變量從尾向前的內容開始符合關鍵字,則將符合的最短內容刪除 |
|||
${變量名%%關鍵字} |
若變量從尾向前的內容開始符合關鍵字,則將符合的最長內容刪除 |
|||
${變量名/old/new} |
若變量內容符合old字符串,則第一個舊字符串被新字符串取代 |
|||
${變量名/old/new} |
若變量內容符合old字符串,則所有舊字符串被新字符串取代 |
|||
#!/bin/bash
echo "$0 $1 and $2"
echo "The number of para is $#"
set Jake Nicky Scott
echo "Para number is :$#All the para is :$*"
$$: shell進程的PID號
$!: 後臺運行的進程的PID號
$?: 退出狀態
1. while getopts xy options 2>/dev/null //只截取x和y,其他的都是/?
2. do
3. case $options in
4. x) echo "you entered x ";;
5. y) echo "you entered y" ;;
6. /?) echo "only -x and -y are valid options " 1>&2 ;;
7. esac
8. done
9. exit 0
局部變量
1. pearFunc () {
2. typeset pear=2 # local pear=2
3. echo "In pearFunc():pear is $pear"
4. }
Bash Shell 調試
bash -n 腳本名 |
最有用的命令
#tail -f /var/log/httpd/access_log #監視Apache的訪問日志
basename ls –ltr ⇒結果:ls
last
例如,我們想在/etc目錄中查找大於500000字節,並且在24小時內修改的某個文件,則可以使用-and (與)把兩個查找參數鏈接起來組合成一個混合的查找方式。
find /etc -size +500000c -and -mtime +1
network
1. 配置一臺主機的網絡實例,其內容包括:網關,DNS服務器,IP地址,子網掩碼
實現方式有兩種:
一,直接修改/etc/sysconfig/network-scripts/ifcfg-eth0文件
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.100.3
GATEWAY=255.255.255.0
BROADCAST=192.168.100.254
ONBOOT=yes
添加DNS
修改:/etc/resolv.conf
nameserver 192.168.100.1
修改主機名/etc/sysconfig/network
HOSTNAME=myhost
爲瞭解析本機的NetBISO名,可將/etc/hosts文件修改爲如下內容:
192.168.100.3 myhost
#!/bin/bash
2. # findstring.sh:
3. # 在一個指定目錄的所有文件中查找一個特定的字符串.
4.
5. directory=/usr/bin/
6. fstring="Free Software Foundation" # 查看哪個文件中包含FSF.
7.
8. for file in $( find $directory -type f -name '*' | sort )
9. do
10. strings -f $file | grep "$fstring" | sed -e "s%$directory%%"
11. # 在"sed"表達式中, 我們必須替換掉正常的替換分隔符"/", 因爲"/"碰巧是我們需要過濾的字符串之一.
12. # 如果不用"%"代替"/"作爲分隔符,那麼這個操作將失敗,並給出一個錯誤消息.(試一試).
13. done
14. exit 0
爲了使用服務生效,執行腳本:/etc/init.d/network restart即可.
VIM
在某個用戶下,現在LINUX上運行vncserver
Vnc密碼:123456
重定向
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
cmd 2> file 把 stderr 重定向到 file 文件中;
cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
gdb
set args
show args
bt (查看堆棧)
p (變量名) – 編譯時要加-g
r
n
c
q
route add -net 192.168.2.0/24 eth0
oracle listen start だめ。/etc/hostsに必ず以下のものを存在すべき。
Localhost localhost.domain
CentOS 5.3でShift_JISを使いたい
まず、ロケ―ルデータがあるかチェック
1 |
# ls -l /usr/lib/locale/ja_JP.SJIS |
ディレクトリが存在しない場合は、
1 |
# localedef -f SHIFT_JIS -i ja_JP /usr/lib/locale/ja_JP.SJIS |
その後、
1 |
# vi /etc/sysconfig/i18n |
|
2 |
LANG="ja_JP.SJIS" |
3 |
SUPPORTED="ja_JP.SJIS:ja_JP:ja" |
|
4 |
SYSFONT="latarcyrheb-sun16" |
で、再ログインするとShift_JISがデフォルトの文字コードになっている。
# nslookup google.com
下記の返答がかえってきたら、ミラーを引きにいけてないので、ネットワークの設定を疑う
;; connection timed out; no servers could be reached
IPアドレスを確認
# ifconfig
eth0 Link encap:Ethernet HWaddr **:**:**:**:**:**
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:44 errors:0 dropped:0 overruns:0 frame:1
TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4045 (3.9 KiB) TX bytes:14779 (14.4 KiB)
Interrupt:177
赤文字のaddrのIPを確認K
デフォルトゲートウェイを確認
#vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
GETWAT=172.28.139.1
ちゃんとむき先はあっているのか確認
名前解決の設定確認
# vi /etc/resolv.conf
nameserver 172.28.138.11
使用ISO文件建立本地yum倉庫
2009-08-26 13:51
Yum 倉庫 爲了避免從網絡下載軟件包可能發生的軟件包不完整、下載速度慢、網絡故障等問題,我們強烈建議您使用本地的 DVD/CD iso 來創建 yum 倉庫,這樣在安裝的時候速度快,而且可以保證所有軟件包都能順利安裝。 下面的操作都是在您安裝好 RHEL/CentOS 系統後進行的。 先從光盤安裝createrepo工具,以及網絡下載工具 wget: # rpm -ivh rpm -ivh createrepo-0.4.11-3.el5.noarch.rpm createrepo命令用於生成 yum倉庫所必須的一些信息,這些信息都存放在 repodata/ 目錄底下,您打開看看就會明白它做了些什麼事情。 如果您使用的是官方的 DVD ISO,則需要將它複製到系統上,掛載後製作 yum 倉庫: # mkdir /mnt/cdrom/ 如果您使用的是多個 CD iso 文件,需要先複製到系統上,掛載後製作 yum 倉庫。 有幾個 ISO 就創建幾個目錄,並將對應的 ISO 掛載上去: # mkdir -p /mnt/{1,2,3,4,5,6} 建 yum 倉庫: # cd /mnt/ 清空並重新定義 yum倉庫: 將/etc/yum.repos.d/下面的文件全部刪除: # rm -f /etc/yum.repos.d/* 創建新的yum倉庫的定義文件:/etc/yum.repos.d/dvdiso.repo,然後加入以下內容: [DVDISO] 執行 'yum clean all' 命令,將所有 yum metadata 等信息清空,再重新獲取最新的倉庫信息: # yum clean all 如果在 'yum list' 命令的輸出中能夠看到剛才製作的倉庫裏的軟件包的名字,那就是 OK 了。再試着安裝一個軟件包看是否成功: # yum install mysql-server |