1.linux系统环境

  1. echo 'echo /etc/profile ' >> /etc/profile
  2. echo 'echo /etc/bashrc' >> /etc/bashrc
  3. echo 'echo /root/.bashrc ' >> /root/.bashrc
  4. echo 'echo /root/.bash_profile ' >> /root/.bash_profile
  5.  
  6. vi /etc/profile #在文件的最后插入
  7. export VAR9=xuegod #=等号两边不能有空格
  8. source /etc/profile #重新加载profile文件

$# 传递到脚本的参数个数
$? 显示最后命令的退出状态;0表示没有错误,其他任何值表明有错误
$! 后台运行的最后一个进程的进程号pid

java环境安装

  1. rpm -ivh jdk-8u161-linux-x64.rpm
  2. rpm -pql /root/jdk-8u161-linux-x64.rpm
  3.  
  4. vim /etc/profile
  5. export JAVA_HOME=/usr/java/jdk1..0_161
  6. export JAVA_BIN=/usr/java/jdk1..0_161/bin
  7. export PATH=${JAVA_HOME}/bin:$PATH
  8. export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
  9.  
  10. source /etc/profile
  11. java -version

获取键盘参数

  1. read a b
  2. hello word
  1. vim if-.sh
  2. #!/bin/bash
  3. if ls /mnt
  4. then
  5. echo "it's ok"
  6. 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:判断用户在系统中是否存在,是否有家目录

  1. cat if-.sh
  2. #!/bin/bash
  3. read -p "input a user:" tu
  4. if grep $tu /etc/passwd ; then
  5. echo "the user $tu exists on this system"
  6. elif ls -d /home/$tu ; then
  7. echo "the user $tu not exists on this system"
  8. echo "$tu has a home directory"
  9. else
  10. echo "the user $tu not exists on this system"
  11. echo "$tu not has a direcotry"
  12. fi

test测试命令

整数比较

-eq 等
-ne 不等
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

  1. cat test2.sh
  2. #!/bin/bash
  3. read -p "input var1 var2:" var1 var2
  4. if [ $var1 -gt $var2 ] ; then
  5. echo "$var1 > $var2"
  6. elif [ $var1 -lt $var2 ] ; then
  7. echo "$var1 < $var2"
  8. else
  9. echo "$var1 = $var2"
  10. fi

注意:在做数值比较时,只能用整数

字符串比较

== 等于
!= 不等于
-z 长度为零
-n 长度不为空
str1 > str2 大于
str1 < str2 小于

根据用户名判断是否是超级管理员

  1. vi test3.sh
  2. #!/bin/bash
  3. read -p "input your name: " name
  4. if [ $name == "root" ] ; then
  5. echo "you are super administrator"
  6. else
  7. echo "You are a general user"
  8. fi

例2:在做字符串大小比较的时候,注意字符串的顺序
大于号和小于号必须转义,要不然SHELL会把它当成重定向符号
大于和小于它们的顺序和sort排序是不一样的
在test比较测试中,它使用的是ASCII顺序,大写字母是小于小写字母的;sort刚好相反

  1. cat test4.sh
  2. #!/bin/bash
  3. var1=test
  4. var2=Test
  5. if [ $var1 \> $var2 ] ; then
  6. echo "$var1 > $var2"
  7. else
  8. echo "$var1 < $var2"
  9. fi
  10. [root@xuegod63 ~]# bash test4.sh
  11. test > Test

-e 文件或目录存在
-r 文件可读
-w 文件可写
-x 文件可执行
-s 有字符在
-d 目录存在
-f 普通文件存在
-c 是字符型文件存在
-b 块文件存在
file1 -nt fle2 是否比后面新
file1 -ot file2 是否比后面旧

  1. vim test5.sh
  2. #!/bin/bash
  3. if [ -e /etc/passwd ] ; then
  4. echo ok
  5. else
  6. echo err
  7. fi
  8. [root@xuegod63 ~]# bash test5.sh
  9. ok
  10.  
  11. test -e /etc/passwd && echo ok || echo err

例:清空日志目录

  1. [root@xuegod63 ~]# cat clear-log.sh
  2. #!/bin/bash
  3. # clear /var/log/messages
  4. #确定当前是root用户
  5. if [ $USER != "root" ];then
  6. echo "你必须使用root用户才能执行脚本"
  7. exit #直接退出,并返回10
  8. fi
  9. #判断文件是否存在
  10. if [ ! -f /var/log/messages ];then
  11. echo "文件不存在"
  12. exit
  13. fi
  14. #保留最近100行的日志内容
  15. tail - /var/log/messages > /var/log/mesg.tmp
  16. #日志清理
  17. >/var/log/messages
  18. #cat /dev/null > /var/log/messages
  19. mv /var/log/mesg.tmp /var/log/messages
  20. echo "Logs clean up"

if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
命令一
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
命令二
else
执行其它
fi

  1. vim umask.sh
  2. if [ $UID -gt ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
  3. echo "umask 002"
  4. else
  5. echo "i am root :umask 022"
  6. fi
  7. [root@xuegod63 ~]# bash umask.sh
  8. i am root :umask

例2:[[ 。。。 ]]和[ 。。。]的区别
[[… ]] 运算符是[… ]运算符的扩充;[[… ]]能够支持 *,< 、>等符号且不需要转义符

  1. if [ $USER == r* ] ;
  2. then echo "hello,$USER" ;
  3. else echo $USER not ;
  4. fi
  5. root not

#对比时r* ,就表示两个字符串 r*

也可以这样写:

  1. if [[ $USER == [a-z]oot ]] ; then echo "hello,$USER" ; else echo $USER not ;
  2. 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:编写脚本检查服务器运行状态

  1. vim status.sh
  2. #!/bin/bash
  3. if [ $# -ge ] ; then
  4. systemctl status $ > /dev/null
  5. if [ $? -eq ] ; then
  6. echo "$1 服务正在运行"
  7. else
  8. systemctl start $
  9. fi
  10. else
  11. echo "执行脚本的格式"
  12. echo "sh $0 服务名"
  13. fi

实战2:根据学生的成绩判断

  1. vi check_cj.sh
  2. #!/bin/bash
  3. read -p "请输入你的成绩 " cj
  4. if [ $cj -ge ] && [ $cj -le ] ;then
  5. echo "补考"
  6. elif [ $cj -ge ] && [ $cj -le ] ;then
  7. echo "良好"
  8. elif [ $cj -ge ] && [ $cj -le ] ;then
  9. echo "好"
  10. elif [ $cj -ge ] && [ $cj -le ] ;then
  11. echo "优秀"
  12. else
  13. echo "成绩的有效范围是0-100之间"
  14. fi

20.5.3 实战3:每周一晚上3:00 ,备份数据库服务器上webdb库的所有数据到系统的/mysqlbak目录里,使用系统日期做备份文件名。

  1. vi mysqlbak.sh
  2. #!/bin/bash
  3. baknamefile=`date +%Y-%m-%d`
  4. bakdir=/mysqlbak
  5. user=root
  6. password=
  7. dbname=webdb
  8. [ -e $bakdir ] || mkdir $bakdir
  9. mysqldump -u$user -p$password --flush-logs $dbname > $bakdir/${baknamefile}-webdb.sql

因为mysql咱们还没有学,这里以/etc目录来做实验:

  1. vi etcbak.sh
  2. #!/bin/bash
  3. baknamefile=`date +%Y-%m-%d`
  4. bakdir=/etcbak
  5. srcdir=/etc
  6. [ -e $bakdir ] || mkdir $bakdir
  7. tar zcvf ${bakdir}/${baknamefile}-etc.tar.gz /etc/
  8. echo "========================"
  9. ls -lh ${bakdir}/${baknamefile}-etc.tar.gz
  10. echo "back etc is ok!"

chmod +x etcbak.sh

crontab -e
0 3 * * * /root/etcbak.sh 2>&1 > /dev/null

【shell脚本】 变量基础学习整理的更多相关文章

  1. SHELL脚本--变量(基础)

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$ ...

  2. 学习笔记:CentOS7学习之二十:shell脚本的基础

    目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...

  3. shell脚本语法基础汇总

    shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...

  4. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  5. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  6. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  7. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...

  8. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  9. shell脚本由基础变量及特殊变量($@、$*、$#等)到实战。

    一.shell脚本建立: shell脚本通常是在编辑器(如vi/vim)中编写,也可以在命令行中直接执行: 1.脚本开头:     规范的脚本第一行需要指出有哪个程序(解释器)来执行脚本中的内容,在L ...

随机推荐

  1. Codeforces 1136 - A/B/C/D/E - (Done)

    链接:https://codeforces.com/contest/1136/ A - Nastya Is Reading a Book - [二分] #include<bits/stdc++. ...

  2. Codeforces 1062 - A/B/C/D/E - (Undone)

    链接:http://codeforces.com/contest/1062 A - Prank - [二分] 题意: 给出长度为 $n(1 \le n \le 100)$ 的数组 $a[1 \sim ...

  3. [tldk][dpdk][dev] TLDK--基于dpdk的用户态协议栈传输层组件简单调研

    如题,以下是一份简单的快速调研. TLDK: Transport Layer Development Kit 一 什么是TLDK transport layer development kit 处理t ...

  4. c++stack容器介绍

    c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: sta ...

  5. 20190422 SQL SERVER 服务

    -- 数据库服务-- SQL Server(MSSQLSERVER)是必须要开启的,这个是数据库引擎服务,就像汽车的发动机一样-- SQL Server代理(MSSQLSERVER)是代理服务,比如你 ...

  6. [js]js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了

    js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了 fn(); // 声明+定义 js中声明过一次的变量,之后在不会重新声明了 function fn() { console.log( ...

  7. PowerBI更新 - 解决方案架构 - PowerBI Solution Architecture(一图胜万字!)

    2019/04更新 参见这里 今天发福利啦!发福利啦!发福利啦! 企业的各种数据整合到PowerBI显示,浏览器,移动端显示关键指标. 一个很好的PowerBI解决方案的图!一图胜万字!你所需要知道的 ...

  8. Unicode编码学习

    unicode基础知识 简单来说,** unicode 是字符集,utf-8,utf-16,utf-32是编码规则.** unicode 字符集: ttps://unicode-table.com/ ...

  9. tp5 model controlle sql

    model::::use think\Db 引用db库类 用于数据库之类use think\Model 引用模板use think\Cookie 引用传值 $rs=Db::name(‘表名’)-> ...

  10. 【Linux】Tomcat安装及一个服务器配置多个Tomcat

    安装环境 :Linux(Ubuntu 版) 安装软件 : apache-tomcat-9.0.0.M1.tar.gz(下载地址http://tomcat.apache.org/) 步骤一 Tomcat ...