linux学习之shell基础

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













  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值