例1
#!/bin/shcase ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type"esac
$1 表示運行該指令碼時的第一個命令列參數${1##*.tar.} 表示第一個命令列參數去掉*.tar.後剩下的部分。比如運行指令碼時用 ./mytar.sh bak.tar.gz, 那麼$1就是指bak.tar.gz, ${1##*.tar.} 就是gz
例2
#!/bin/bash
UNPACK=1
if [ ${1##*.} = bz2 ] ; then
TEMP=${1%.*}
if [ ${TEMP##*. } = tar ] ; then
tar jxvf $1
UNPACK=$?
echo This is a tar.bz2 package
else
bunzip2 $1
UNPACK=$?
echo This is a bz2 package
fi
fi
上面紅色標記的地方 ${1##*.} = bz2 這個1後面的兩個##,跟著一個*和一個點 是什麼意思啊
還有就是第二個紅色標記得的地方 TEMP後面得兩個 " 1%.* " 是什麼意思
我只知道這個指令碼是解壓檔案得 根據不同得尾碼名 選擇不同得解壓命令
兩個標記紅色地方我很難理解
其中:$?表示:
表示上一個命令傳回值,一般如果是 0 表示 運行正確,非0 表示運行出錯
shell編程1)編寫SHELL指令碼,能將檔案d1和d2整合為檔案d3。2)編寫兩個shell 指令碼s1、s2,其中s1能夠啟動3個進程,進程名稱分別為a,b,c,每個進程的代碼如下:int main(){ while(1) {};return 0;}s2 能夠殺死這3個進程,並且要求s2的執行不允許人為指定參數。
1) cat d1 d2 >d3 # 前提是文字檔,還可以使用join
2)s1.sh
#!/bin/bash
/path/a &
/path/b &
/path/c &
s2.sh
#!/bin/bash
kill -9 $(pgrep a) #kill -9表示強制殺死進程
#或者kill -9 $(ps aux | grep -w a | grep -v grep | awk '{print $2}')
kill -9 $(pgrep b)
#同上
kill -9 $(pgrep c)
#同上
另外,講一下pgrep命令。
pgrep 是通過程式的名字來查詢進程的工具,一般是用來判斷程式是否正在運行。在伺服器的配置和管理中,這個工具常被應用,簡單明了;
用法:
#ps 參數選項 程式名
常用參數
-l 列出程式名和進程ID;
-o 進程起始的ID;
-n 進程終止的ID;
舉例:
[root@localhost ~]# pgrep -lo httpd
4557 httpd
[root@localhost ~]# pgrep -ln httpd
4566 httpd
[root@localhost ~]# pgrep -l httpd
4557 httpd
4560 httpd
4561 httpd
4562 httpd
4563 httpd
4564 httpd
4565 httpd
4566 httpd
[root@localhost ~]# pgrep httpd
4557
4560
4561
4562
4563
4564
4565
4566