bash編程:
bash自身是一個進程:是一個命令解釋器
type 查看命令的類型python
shell腳本:
第一行,頂格:
shebang shell和許多其它解釋性語言的註釋符,所以在這些語言中,解釋器指令自己會
被解釋器認爲是單純的註釋而跳過。
#!/bin/bash
#!/usr/bin/pythonlinux
其它的以#開頭的行均爲註釋,會被解釋器忽略;shell
練習:
建立一個組newgroup,id號8008;
建立一個用戶,名字爲mageedu, id號爲3306,附加組爲newgroup
建立目錄/tmp/hellobash
複製/etc/rc.d/init.d/functions至/tmp/hellobash目錄中編程
過程式編程語言:
順序執行
選擇執行:測試條件,可能會多個測試條件,某條件知足時,則執行對應的分支
循環執行:將同一段代碼反覆執行屢次;所以,循環必須有退出條件;不然,則陷入死循環;bash
bash
-n: 語法測試
bash -n scripts.sh
-x: 模擬單步執行編程語言
變量類別:
本地變量
環境變量
export:導出
局部變量
位置變量
$1, ..., $n, ${10} 到達兩位數時,須要用{}括起來
練習:寫一個腳本,能接受一個參數做爲用戶名,此腳本可建立此用戶,而且其密碼同用戶名;
shift [n]
特殊變量:
$? 命令狀態返回值
$#: 傳遞給腳本參數的個數
$*
$@:引用傳遞給腳本的全部參數測試
bash的循環語句:
for:遍歷有限的元素列表,
while:
until:進程
for語句的格式:
for VAR_NAME in LIST
do
循環體
doneip
LIST:列表,中間包括一個或多個元素it
退出條件:遍歷結束
練習:建立10個用戶,user301, user310
[root@linux_basic scripts]#echo {01..10}
01 02 03 04 05 06 07 08 09 10
列表:user301, user310
列表:301, 310
生成數值列表:
{start..end}
例如:{1..100}
seq
命令引用
NAME
seq - print a sequence of numbers
SYNOPSIS
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST
DESCRIPTION
Print numbers from FIRST to LAST, in steps of INCREMENT.
[root@linux_basic scripts]#seq 01 10
1
2
3
4
5
6
7
8
9
10
for userNo in {301..310}
for userNo in $(seq 301 310); do
useradd user${userNo}
done
[root@linux_basic scripts]#echo 3{01..10}
301 302 303 304 305 306 307 308 309 310
date +%Y%m%d-%H%M%S
練習:建立目錄/tmp/dir-當前日期時間;例如/tmp/dir-20140707-155503
在此目錄中建立10個空文件,分別爲file1-file10;
mkdir /tmp/dir-$(date +%y%m%d-%H%M%S)
for filename in $(seq 1 10): do
touch file${filename}
done
touch file{1..10}
練習:寫一個腳本
一、建立用戶tuser1-tuser9;
二、建立目錄/tmp/dir-當前日期時間;
三、在/tmp/dir-當前日期時間 目錄中建立9個空文件file101-file109
四、將file101的屬主改成tuser1,依次類推,一直將file109的屬主改成tuser9;
touch tuser{1..9} var=$(date +%F-%T) mkdir /tmp/dir-${var} touch /tmp/dir-${var}/file1{01..09} for num in $(seq 1 9);do chmod user${num} /tmp/dir-${var}/file10${num} done