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