linux shell入门
Posted bamboo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell入门相关的知识,希望对你有一定的参考价值。
linux shell入门
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序。使用Shell可以启动、挂起、停止一些程序。
1. shell脚本格式要求
- 脚本以 #!/bin/bash 开头
- 脚本需要有可执行权限,或以 sh test.sh 方式执行
2.shell变量介绍
- 系统变量:$HOME、$PATH、$PWD...,执行命令 set 可以查看所有系统变量
自定义变量:
- 定义变量:变量名=A
- 销毁变量:unset 变量名
- 声明静态变量:readonly 变量,注意:不能销毁
定义变量的规则:
- 变量名和等号之间不能有空格
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
将命令的返回值赋给变量
方式一: #!/bin/bash A=`date` echo $A 方式二: A=$(date) echo $A //Mon May 24 18:35:05 CST 2021
位置参数变量:可以在脚本中获取参数信息
-
$n
,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……当n大于等于10时,参数变量需要用大括号包含,例${n} -
$#
,获取传递到脚本的参数个数 -
$*
,以一个单字符串显示所有向脚本传递的参数 -
$@
,与$*相同,但是使用时加引号,并在引号中返回每个参数。
-
预定义变量
-
$$
,获取脚本运行的当前进程ID号 -
$!
,后台运行的最后一个进程的ID号 -
$?
,显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
-
3. 基本运算符
算数运算符:原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
#!/bin/bash 1.使用expr TEMP=`expr 2 + 3` VAL=`expr $TEMP \\* 4` //输出 20 2.使用$((运算表达式)) VAL=$(((2 + 3) * 4)) //输出20
关系运算符:只支持数字,不支持字符串,除非字符串的值是数字。
#!/bin/bash if [ 23 -ge 22 ] then echo "大于等于" fi
字符串运算符
#!/bin/bash if [ \'ok\' = \'ok\' ] then echo "equal" fi if [ -n \'abc\' ] then echo \'字符串长度不为零\' fi
文件测试运算符:文件测试运算符用于检测 Unix 文件的各种属性。
#!/bin/bash if [ -f /root/shell_code/hello.sh ] then echo \'/root/shell_code/hello.sh 是一个文件\' fi
布尔运算符:
#!/bin/bash if [ !false ] then echo \'true\' fi if [ 1 -lt 2 -o 2 -lt 3 ] then echo \'true\' fi
4. 流程控制
if else
#!/bin/bash if [ 10 -gt $A] then echo "10 大于 $A" elif [ 10 -gt $b ] then echo "10 大于 $B" elif [ 10 -gt $C ] then echo "10 大于 $C" else echo "啥也不是" fi
for 循环
#!/bin/bash for var in 1 2 3 4 5 do echo $var done
while
#!/bin/bash int=1 while [ $int -le 5 ] do echo $int let "int++" done
case ... esac
#!/bin/bash value=2 case $value in 1) echo 1 ;; 2) echo 2 ;; 3) echo 3 ;; *) echo \'匹配失败\' ;; esac
5. 综合案例
需求分析:
- 每天凌晨2:30备份数据库test到/data/backup/mysql
- 记录备份开始和结束时间
- 备份后的文件以时间格式命名,并打包成.tar.gz文件。
- 备份的同时,检查是否存在10天前的备份文件,并删除。
#!/bin/bash
#备份目录
BACKUP=/data/backup/mysql
#当前时间
DATETIME=$(date +%Y%m%d%H%M%S)
#数据库地址
HOST=localhost
#数据库名称
DATABASE=test
#数据库账号
DB_USER=root
#数据库密码DATABASE
DB_PWD=root
#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/${DATETIME}.sql.gz
#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除备份源目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \\;
echo "备份数据库${DATABASE} ok..."
//crontab定时任务设置:30 2 * * * /root/shell_code/mysql_db_backup.sh
以上是关于linux shell入门的主要内容,如果未能解决你的问题,请参考以下文章