【shell脚本】 变量基础学习整理
1.linux系统环境
- echo 'echo /etc/profile ' >> /etc/profile
- echo 'echo /etc/bashrc' >> /etc/bashrc
- echo 'echo /root/.bashrc ' >> /root/.bashrc
- echo 'echo /root/.bash_profile ' >> /root/.bash_profile
- vi /etc/profile #在文件的最后插入
- export VAR9=xuegod #=等号两边不能有空格
- source /etc/profile #重新加载profile文件
$# 传递到脚本的参数个数
$? 显示最后命令的退出状态;0表示没有错误,其他任何值表明有错误
$! 后台运行的最后一个进程的进程号pid
java环境安装
- rpm -ivh jdk-8u161-linux-x64.rpm
- rpm -pql /root/jdk-8u161-linux-x64.rpm
- vim /etc/profile
- export JAVA_HOME=/usr/java/jdk1..0_161
- export JAVA_BIN=/usr/java/jdk1..0_161/bin
- export PATH=${JAVA_HOME}/bin:$PATH
- export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
- source /etc/profile
- java -version
获取键盘参数
- read a b
- hello word
- vim if-.sh
- #!/bin/bash
- if ls /mnt
- then
- echo "it's ok"
- fi
20.2.2 双分支if语句
语法格式:
if command ;
then
commands
else
commands
fi
多分支
if条件测试操作1 ; then
commands
elif 条件测试操作2 ; then
commands
elif 条件测试操作3 ; then
commands
.......
else
commands
fi
例4:判断用户在系统中是否存在,是否有家目录
- cat if-.sh
- #!/bin/bash
- read -p "input a user:" tu
- if grep $tu /etc/passwd ; then
- echo "the user $tu exists on this system"
- elif ls -d /home/$tu ; then
- echo "the user $tu not exists on this system"
- echo "$tu has a home directory"
- else
- echo "the user $tu not exists on this system"
- echo "$tu not has a direcotry"
- fi
test测试命令
整数比较
-eq 等
-ne 不等
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
- cat test2.sh
- #!/bin/bash
- read -p "input var1 var2:" var1 var2
- if [ $var1 -gt $var2 ] ; then
- echo "$var1 > $var2"
- elif [ $var1 -lt $var2 ] ; then
- echo "$var1 < $var2"
- else
- echo "$var1 = $var2"
- fi
注意:在做数值比较时,只能用整数
字符串比较
== 等于
!= 不等于
-z 长度为零
-n 长度不为空
str1 > str2 大于
str1 < str2 小于
根据用户名判断是否是超级管理员
- vi test3.sh
- #!/bin/bash
- read -p "input your name: " name
- if [ $name == "root" ] ; then
- echo "you are super administrator"
- else
- echo "You are a general user"
- fi
例2:在做字符串大小比较的时候,注意字符串的顺序
大于号和小于号必须转义,要不然SHELL会把它当成重定向符号
大于和小于它们的顺序和sort排序是不一样的
在test比较测试中,它使用的是ASCII顺序,大写字母是小于小写字母的;sort刚好相反
- cat test4.sh
- #!/bin/bash
- var1=test
- var2=Test
- if [ $var1 \> $var2 ] ; then
- echo "$var1 > $var2"
- else
- echo "$var1 < $var2"
- fi
- [root@xuegod63 ~]# bash test4.sh
- test > Test
-e 文件或目录存在
-r 文件可读
-w 文件可写
-x 文件可执行
-s 有字符在
-d 目录存在
-f 普通文件存在
-c 是字符型文件存在
-b 块文件存在
file1 -nt fle2 是否比后面新
file1 -ot file2 是否比后面旧
- vim test5.sh
- #!/bin/bash
- if [ -e /etc/passwd ] ; then
- echo ok
- else
- echo err
- fi
- [root@xuegod63 ~]# bash test5.sh
- ok
- test -e /etc/passwd && echo ok || echo err
例:清空日志目录
- [root@xuegod63 ~]# cat clear-log.sh
- #!/bin/bash
- # clear /var/log/messages
- #确定当前是root用户
- if [ $USER != "root" ];then
- echo "你必须使用root用户才能执行脚本"
- exit #直接退出,并返回10
- fi
- #判断文件是否存在
- if [ ! -f /var/log/messages ];then
- echo "文件不存在"
- exit
- fi
- #保留最近100行的日志内容
- tail - /var/log/messages > /var/log/mesg.tmp
- #日志清理
- >/var/log/messages
- #cat /dev/null > /var/log/messages
- mv /var/log/mesg.tmp /var/log/messages
- echo "Logs clean up"
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
命令一
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
命令二
else
执行其它
fi
- vim umask.sh
- if [ $UID -gt ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
- echo "umask 002"
- else
- echo "i am root :umask 022"
- fi
- [root@xuegod63 ~]# bash umask.sh
- i am root :umask
例2:[[ 。。。 ]]和[ 。。。]的区别
[[… ]] 运算符是[… ]运算符的扩充;[[… ]]能够支持 *,< 、>等符号且不需要转义符
- if [ $USER == r* ] ;
- then echo "hello,$USER" ;
- else echo $USER not ;
- fi
- root not
#对比时r* ,就表示两个字符串 r*
也可以这样写:
- if [[ $USER == [a-z]oot ]] ; then echo "hello,$USER" ; else echo $USER not ;
- fi
[[ 。。。 ]]和[ 。。。]的区别汇总:
1、所有的字符与逻辑运算符直接用“空格”分开,不能连到一起。
2、在[… ]表达式中,常见的> 、<需要加转义符\,大小比较
3、进行逻辑运算符&& 、||比较时;如果用的[ ]符号,则用在外面,如[… ] && [… ] || [ …]如果在[…]里面进行逻辑与或的比较,则用-a、-o进行表示,如[ x = y –a x < z –o x > m ]
4、[[… ]] 运算符只是[… ]运算符的扩充;能够支持< 、>符号运算不需要转义符;它还是以字符串比较大小。里面支持逻辑运算符 || 、 && , 不再使用-a 、-o
5、[[…]] 用 && 而不是 -a 表示逻辑“与”;用 || 而不是 -o表示逻辑“或”
6、[[… ]]可以进行算术扩展,而[ ... ]不可以
7、[[...]]能用正则,而[...]不行
8、双括号(( ))用于数学表达式
9、双方括号号[[ ]]用于高级字符串处理,比如“模糊匹配”
20.5.1 实战1:编写脚本检查服务器运行状态
- vim status.sh
- #!/bin/bash
- if [ $# -ge ] ; then
- systemctl status $ > /dev/null
- if [ $? -eq ] ; then
- echo "$1 服务正在运行"
- else
- systemctl start $
- fi
- else
- echo "执行脚本的格式"
- echo "sh $0 服务名"
- fi
实战2:根据学生的成绩判断
- vi check_cj.sh
- #!/bin/bash
- read -p "请输入你的成绩 " cj
- if [ $cj -ge ] && [ $cj -le ] ;then
- echo "补考"
- elif [ $cj -ge ] && [ $cj -le ] ;then
- echo "良好"
- elif [ $cj -ge ] && [ $cj -le ] ;then
- echo "好"
- elif [ $cj -ge ] && [ $cj -le ] ;then
- echo "优秀"
- else
- echo "成绩的有效范围是0-100之间"
- fi
20.5.3 实战3:每周一晚上3:00 ,备份数据库服务器上webdb库的所有数据到系统的/mysqlbak目录里,使用系统日期做备份文件名。
- vi mysqlbak.sh
- #!/bin/bash
- baknamefile=`date +%Y-%m-%d`
- bakdir=/mysqlbak
- user=root
- password=
- dbname=webdb
- [ -e $bakdir ] || mkdir $bakdir
- mysqldump -u$user -p$password --flush-logs $dbname > $bakdir/${baknamefile}-webdb.sql
因为mysql咱们还没有学,这里以/etc目录来做实验:
- vi etcbak.sh
- #!/bin/bash
- baknamefile=`date +%Y-%m-%d`
- bakdir=/etcbak
- srcdir=/etc
- [ -e $bakdir ] || mkdir $bakdir
- tar zcvf ${bakdir}/${baknamefile}-etc.tar.gz /etc/
- echo "========================"
- ls -lh ${bakdir}/${baknamefile}-etc.tar.gz
- echo "back etc is ok!"
chmod +x etcbak.sh
crontab -e
0 3 * * * /root/etcbak.sh 2>&1 > /dev/null
【shell脚本】 变量基础学习整理的更多相关文章
- SHELL脚本--变量(基础)
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$ ...
- 学习笔记:CentOS7学习之二十:shell脚本的基础
目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...
- shell脚本语法基础汇总
shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...
- linux的基本操作(shell 脚本的基础知识)
shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...
- SHELL脚本编程基础知识
SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...
- shell脚本编程基础介绍
Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...
- linux基础—课堂随笔_03 SHELL脚本编程基础
shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- shell脚本由基础变量及特殊变量($@、$*、$#等)到实战。
一.shell脚本建立: shell脚本通常是在编辑器(如vi/vim)中编写,也可以在命令行中直接执行: 1.脚本开头: 规范的脚本第一行需要指出有哪个程序(解释器)来执行脚本中的内容,在L ...
随机推荐
- Codeforces 1136 - A/B/C/D/E - (Done)
链接:https://codeforces.com/contest/1136/ A - Nastya Is Reading a Book - [二分] #include<bits/stdc++. ...
- Codeforces 1062 - A/B/C/D/E - (Undone)
链接:http://codeforces.com/contest/1062 A - Prank - [二分] 题意: 给出长度为 $n(1 \le n \le 100)$ 的数组 $a[1 \sim ...
- [tldk][dpdk][dev] TLDK--基于dpdk的用户态协议栈传输层组件简单调研
如题,以下是一份简单的快速调研. TLDK: Transport Layer Development Kit 一 什么是TLDK transport layer development kit 处理t ...
- c++stack容器介绍
c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: sta ...
- 20190422 SQL SERVER 服务
-- 数据库服务-- SQL Server(MSSQLSERVER)是必须要开启的,这个是数据库引擎服务,就像汽车的发动机一样-- SQL Server代理(MSSQLSERVER)是代理服务,比如你 ...
- [js]js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了
js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了 fn(); // 声明+定义 js中声明过一次的变量,之后在不会重新声明了 function fn() { console.log( ...
- PowerBI更新 - 解决方案架构 - PowerBI Solution Architecture(一图胜万字!)
2019/04更新 参见这里 今天发福利啦!发福利啦!发福利啦! 企业的各种数据整合到PowerBI显示,浏览器,移动端显示关键指标. 一个很好的PowerBI解决方案的图!一图胜万字!你所需要知道的 ...
- Unicode编码学习
unicode基础知识 简单来说,** unicode 是字符集,utf-8,utf-16,utf-32是编码规则.** unicode 字符集: ttps://unicode-table.com/ ...
- tp5 model controlle sql
model::::use think\Db 引用db库类 用于数据库之类use think\Model 引用模板use think\Cookie 引用传值 $rs=Db::name(‘表名’)-> ...
- 【Linux】Tomcat安装及一个服务器配置多个Tomcat
安装环境 :Linux(Ubuntu 版) 安装软件 : apache-tomcat-9.0.0.M1.tar.gz(下载地址http://tomcat.apache.org/) 步骤一 Tomcat ...