Linux Shell编程

作者: Manfestain | 来源:发表于2020-03-26 20:33 被阅读0次

Shell是一个命令解释器,它可以为用户提供一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以通过Shell来启动、挂起、停止甚至是编写一些程序。


1. Shell编程快速入门

要求:

  1. 脚本以#!/bin/bash开头
  2. 脚本需要可执行权限

执行方式:

  1. 赋予xxx.sh脚本+x权限,执行脚本
    chmod 755 xxx.sh
    ./xxx.sh
  2. 不用赋予+x权限,直接执行
    sh ./xxx.sh

2. Shell变量

Shell变量主要分为系统变量自定义变量

系统变量

$HOME$PWD$SHELL$USER

自定义变量
  • 定义变量:变量=值(中间不能有空格)
    撤销变量:unset 变量
  • 定义静态变量:readonly 变量=值(静态变量不能unset)
  • 把自定义变量升为系统变量,供其他脚本使用:
  • 将命令的返回值赋值给变量:
    1.A=‘ls -l’:运行里边的命令,并把结果返回给变量A(‘表示反引号,esc的下方那个键)
    2.A=$(date):等价于反引号

3. 设置环境变量

  • expert 变量名=变量值:将shell变量输出为环境变量
  • source 配置文件:让修改后的配置信息立即生效
  • echo 变量名:查询环境变量的值

4. 位置参数变量

在执行shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

./myShell.sh 100 200:执行shell的命令,可以在myShell脚本中获取到参数信息100 200

  • $nn为数字,$0代表命令本身,$1-$9代表第一到第九个参数,10以上的参数需要用大括号包含,如${10}
  • $*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
  • $@:这个变量也代表命令行中所有的参数,&@把每个参数区分对待
  • $#:这个变量代表命令行中所有参数的个数

bash:


输出:



5. 预定义变量

shell设计者预先定义好的变量,可以直接在shell中使用

  • $$:当前进程的进程号(PID)
  • $!:后台运行的最后一个进程的进程号(PID)
  • $?:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个指令已经执行;如果这个变量非0,则证明上一个命令执行不争取。

bash:


输出:



6. 运算符

基本语法:

  • $((运算式))$[运算式]
  • expr m + n(expr运算符间要有空格)
    运算符:
    1.\*:乘
    2./:除
    3.%:取余

bash:


输出:



7. 条件判断

基本语法:
[ condition ](注意:condition前后要有空格)
非空返回true,可使用$?验证(0true>1false

  • [ atguigu ]:返回true
  • []:返回false

常用判断条件

  1. 两个整数的比较
    =:字符串比较
    -lt:小于(less than:lt)
    -le:小于等于(less equal:le)
    -q:等于
    -gt:大于(greater than:gt)
    -ge:大于等于
    -ne:不等于(not equal:ne)
  2. 按照文件权限进行判断
    -r:有读的权限
    -w:有写的权限
    -x:有执行的权限
  3. 按照文件类型判断
    -f:文件存在并且是一个常规文件
    -e:文件存在
    -d:文件存在并且是一个目录

bash:


输出:



8. 流程控制

if语句

  1. if [ 条件判断 ];then
    程序
    fi
  2. if [ 条件判断 ]
    then
      程序
    elfi [ 条件判断 ]
    then
      程序
    fi

编写一个shell程序,如果输入的参数大于等于60,则输出“及格了”,如果小于60,则输出“不及格”。


case语句

基本语法:
case $变量名 in
"值1")
如果变量值等于1,则执行程序1
;;
"值2")
如果变量值等于2,则执行程序2
;;
"值3")
如果变量值等于3,则执行程序3
;;
esac

当命令行参数是1时,输出“周一”;是2时,输出“周二”;其它情况输出“other”。



for循环

  1. for 变量 in 值1 值2...
    do
      程序
    done
  2. for ((初始值; 循环控制条件; 变量变化))
    do
      程序
    done

使用第一种方式打印命令行的输入参数



使用第二种方式将1加到100的值输出显示



while循环

while [ 条件判断 ]
do
  程序
done

从命令行输入一个数,统计从1+...+n的值是多少?




9. read读取控制台输入

基本语法:
read [选项] 参数
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,则不再等待了。
变量:指定读取的变量名

读取控制台输入的number




10. 函数

shell里有系统函数自定义函数

系统函数

  1. basename [pathname] [suffix]
    删掉所有的前缀包括最后一个/字符,然后将字符串显示出来
    suffix为后缀,如果suffix被制定了,basename会将pathnamestring中的suffix去掉。
  2. dirname [pathanme]
    返回完整路径最后/前面部分,常用于返回路径部分

自定义函数

[ function ] funname[()]
{
程序;
[return int;]
}
调用直接写函数名:funname [值]

计算两个数的和




11. Shell编程实例

需求:

  1. 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
  2. 备份开始和备份结束给出相应的提示信息
  3. 备份后的文件要求以备份时间命名,并打包成.tar.gz
  4. 在备份时,检查是否有10天前的备份,如果有就删除

编写crontab执行脚本:
crontab -e
10 2 * * * /usr/sbin/mysql_backup_db.sh

相关文章

网友评论

    本文标题:Linux Shell编程

    本文链接:https://www.haomeiwen.com/subject/eghhuhtx.html