本文共 4932 字,大约阅读时间需要 16 分钟。
Shell的作用 -- 命令解释器,“翻译官”
Bash的常用功能:
Tab键自动补齐
命令历史 命令别名 标准输入输出 重定向操作 管道操作命令历史
保存用户曾经执行过的命令操作 存放位置:~/.bash_history 文件 查看历史命令 使用↑、↓按键逐条翻看,允许编辑并重复执行 执行:history 清除历史命令 执行:history -c调用历史命令
!n:执行历史记录中的第n条命令 !str:执行历史记录中以“str”开头的命令 设置记录历史命令的条数 修改 HISTSIZE 参数(默认为1000条)Bash的标准输入输出 :
交互式硬件设备
标准输入:从该设备接收用户输入的数据 标准输出:通过该设备向用户输出数据 标准错误:通过该设备报告执行出错信息Bash的重定向操作
Bash的管道操作:
管道操作符号“|”
连接左右两个命令,将左侧的命令输出的结果,作为右侧命令的输入(处理对象) 格式:cmd1 | cmd2 [... | cmdn]Shell变量的应用
Shell变量
为灵活管理Linux系统提供特定参数,有两层意思: 1.变量名:使用固定的名称,由系统预设或用户定义 2. 变量值:能够根据用户设置、系统环境变化而变化 Shell变量的种类 用户自定义变量:由用户自己定义、修改和使用 环境变量:由系统维护,用于设置用户的Shell工作环境,只有极少数的变量用户可以修改 预定义变量:Bash预定义的特殊变量,不能直接修改 位置变量:通过命令行给程序传递执行参数变量的赋值与引用
定义新的变量
变量名要以英文字母或下划线开头,区分大小写 格式:变量名=变量值 查看变量的值 格式:echo $变量名 查看所有变量:set 清除变量 unset 变量名从键盘输入内容为变量赋值
格式: read [-p "信息"] 变量名 结合不同的引号为变量赋值 双引号 “ ” :允许通过$符号引用其他变量值 单引号 ‘ ’ :禁止引用其他变量值,$视为普通字符 反撇号 ` ` :将命令执行的结果输出给变量[root@localhost ~]# echo $FILESVR
filesvr.lamp.com [root@localhost ~]# export FILESVR [root@localhost ~]# zsh [root@localhost]~# echo $FILESVR filesvr.lamp.com [root@localhost]~# exit [root@localhost root]# unset FILESVR [root@localhost root]# echo $FILESVR数值变量的运算:
计算整数表达式的运算结果
格式:expr 变量1 运算符 变量2 ...[运算符 变量n] expr的常用运算符 加法运算:+ 减法运算: - 乘法运算: \* 除法运算: / 求模(取余)运算: %环境变量赋值:
设置变量的作用范围
格式:export 变量名... export 变量名=变量值 [...变量名n=变量值n] 查看环境变量 env 或 export 清除用户定义的变量 格式:unset 变量名 多命令运行:;
命令顺序执行。 && 前后命令的执行存在逻辑与关系,只有&&前面的命令执行成功后,它后面的命令才被执行。 || 前后命令的执行存在逻辑或关系,只有||前面的命令执行失败后,它后面的命令才被执行。 () 改变命令执行顺序通配符与特殊符号:
通配符
* 任意多个 ? 任意一个 [] 括号内任一个 [^0-9]非数字 特殊符号 \ 转义符 & 后台 ! 非Shell脚本的概念:
Shell脚本
1.用途:完成特定的、较复杂的系统管理任务 2.格式:集中保存多条Linux命令,普通文本文件 3.执行方式:按照预设的顺序依次解释执行编写可执行的Shell脚本 :
建立包含执行语句的脚本文件
#脚本文件中包括的内容 运行环境设置:#!/bin/bash 注释信息:以#开始的说明性文字 可执行的Linux命令行 为脚本文件添加可执行权限给shell脚本增加执行权限
[root@localhost ~]# vi repboot.sh
#!/bin/bash # To show usage of /boot directory and mode of kernel file. echo "Useage of /boot: " du -sh /boot echo "The mode of kernel file:" ls -lh /boot/vmlinuz-* [root@localhost ~]# chmod a+x repboot.sh运行Shell脚本程序:
1.直接执行具有“x”权限的脚本文件
例如:./repboot.sh 2.使用指定的解释器程序执行脚本内容 例如:bash repboot.sh、sh repboot.sh 3.通过source命令(或 . )读取脚本内容执行 例如:souce repboot.sh 或 . hello.sh正则表达式:
1 ^
#只匹配行首 2 $ #只匹配行尾 3 * #匹配0个或者多个单字符 4 [] #只匹配[]内字符,可以是一个单字符,也可以是字符序列,可以使用*表示[]内字符序列范围,如用[1-5]代替[12345] 5 \ #只用来屏蔽一个元字符的特殊含义 6 . #只匹配任意单字符 7 pattern\{n\} #匹配n次pattern 8 pattern\{n,\} #匹配n次以上pattern 9 pattern\{n,m\} #匹配n到m次pattern 10 ...x..x..x #匹配文件或目录权限的属性非常有用 11 ^只允许在一行的开始匹配字符或单词 ^d 筛选出以d开头的文件属性 12 ^ $ #匹配空行 13 ^.$ #匹配包含一个字符的行 14 kkk$ #匹配以kkk结尾的所有字符 15 \*\.pas #匹配以*.pas结尾的所有字符或文件 16 a\{2\}b #a出现两次,aab 17 a\{4,\}b #a至少出现4次,aaaab,aaaaab .. 18 a\{2,4\} #a出现次数范围2-4次 19 [0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} #匹配所有ip地址awk命令使用:
1 last > file
#把last命令结果保存在file文件中 2 awk ‘{print $0 “\n”}' file #查找出file文件中的每一列 3 awk '{print $1"\t"$7 “\n”}' file #查找出file文件中的第1列和第七列awk常见内置变量:
NF 每一行的字段数
NR 当前处理的尾第几行 FS 字段分隔符(默认为空格) last | awk ‘{printf $1 “\t lines:” NR “\t columes:” NF ”\n”}’ BEGIN 预设变量。在awk程序没有读取数据前 执行,且只执行一次 cat /etc/passwd | awk ‘BEGIN {FS=“:”} {printf $1 “\t” $3 “\n”}’ 条件测试操作: test命令 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值 格式:test 条件表达式 [ 条件表达式 ] 常见的测试类型 测试文件状态 字符串比较 整数值比较 逻辑测试 测试文件状态 格式:[ 操作符 文件或目录 ] 常用的测试操作符 -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否为文件(File) -r:测试当前用户是否有权限读取(Read) -w:测试当前用户是否有权限写入(Write) -x:测试当前用户是否可执行(Excute)该文件 -L:测试是否为符号连接(Link)文件 整数值比较 格式:[ 整数1 操作符 整数2 ] 常用的测试操作符 -eq:等于(Equal) -ne:不等于(Not Equal) -gt:大于(Greater Than) -lt:小于(Lesser Than) -le:小于或等于(Lesser or Equal) -ge:大于或等于(Greater or Equal)字符串比较
格式:[ 字符串1 == 字符串2 ] [ 字符串1 != 字符串2 ] [ -z 字符串 ] 常用的测试操作符 ==:字符串内容相同 !=:字符串内容不同,! 号表示相反的意思 -z:字符串内容为空 逻辑测试 格式:[ 表达式1 ] 操作符 [ 表达式2 ] ... 常用的测试操作符 -a或&&:逻辑与,“而且”的意思 #前后两个表达式都成立时整个测试结果才为真,否则为假 -o或||:逻辑或,“或者”的意思 #操作符两边至少一个为真时,结果为真,否则结果为假 !:逻辑否 #当指定的条件不成立时,返回结果为真if条件语句:
应用示例: 如果/boot分区的空间使用超过80%,输出报警信息 #!/bin/bash RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 ` if [ $RATE -gt 80 ] then echo "Warning,DISK is full!" fi 判断mysqld是否在运行,若已运行则输出提示信息,否则重新启动mysqld服务: #!/bin/bash TEST=`/usr/bin/pgrep mysqld ` if [ “$TEST” != “” ] then echo "mysqld service is running." else /etc/init.d/mysqld restart fi依次输出3条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串:
[root@localhost ~]# vi showday.sh #!/bin/bash for TM in "Morning" "Noon" "Evening" do echo "The $TM of the day." done执行脚本:
[root@localhost ~]# sh showday.sh
The Morning of the day. The Noon of the day. The Evening of the day 批量添加20个系统用户帐号, 用户名依次为“stu1”、“stu2”、……、“stu20” 这些用户的初始密码均设置为“123456”#!/bin/bash
i=1 while [ $i -le 20 ] do useradd stu$i echo "123456" | passwd --stdin stu$i &> /dev/null i=`expr $i + 1` done 批量删除上例中添加的20个系统用户帐号:#!/bin/bash
i=1 while [ $i -le 20 ] do userdel -r stu$i i=`expr $i + 1` done编写脚本文件 mydb.sh,用于控制系统服务mysqld
当执行 ./mydb.sh start 时,启动mysqld服务 当执行 ./mydb.sh stop 时,关闭mysqld服务 如果输入其他脚本参数,则显示帮助信息#!/bin/bash
case $1 in start) echo "Start MySQL service." ;; stop) echo "Stop MySQL service." ;; *) echo "Usage:$0 start|stop" ;; esac转载地址:http://cbrun.baihongyu.com/