【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.8.0_161
export JAVA_BIN=/usr/java/jdk1.8.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-1.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-4.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
[[email protected] ~]# 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
[[email protected] ~]# bash test5.sh
ok

test -e /etc/passwd && echo ok || echo err

例:清空日志目录

[[email protected] ~]# cat clear-log.sh
#!/bin/bash
# clear /var/log/messages
#确定当前是root用户
if [ $USER != "root" ];then
echo "你必须使用root用户才能执行脚本"
exit 10 #直接退出,并返回10
fi
#判断文件是否存在
if [ ! -f /var/log/messages ];then
echo "文件不存在"
exit 12
fi
#保留最近100行的日志内容
tail -100 /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 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
echo "umask 002"
else
echo "i am root :umask 022"
fi
[[email protected] ~]# bash umask.sh
i am root :umask 022

例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 1 ] ; then
systemctl status $1 > /dev/null
if [ $? -eq 0 ] ; then
echo "$1 服务正在运行"
else
systemctl start $1
fi
else
echo "执行脚本的格式"
echo "sh $0 服务名"
fi

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

vi check_cj.sh
#!/bin/bash
read -p "请输入你的成绩 " cj
if [ $cj -ge 0 ] && [ $cj -le 59 ] ;then
echo "补考"
elif [ $cj -ge 60 ] && [ $cj -le 70 ] ;then
echo "良好"
elif [ $cj -ge 71 ] && [ $cj -le 85 ] ;then
echo "好"
elif [ $cj -ge 86 ] && [ $cj -le 100 ] ;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=123
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

原文地址:https://www.cnblogs.com/zsl-find/p/9968504.html

时间: 2024-10-03 15:48:23

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

shell脚本的基础学习

一.shell的历史 shell的作用是解释执行用户的命令,用户输入一条命令,shell就解释执行一条,这种方式称为交互式.     用户还有一种执行命令的方式叫做批处理,用户事先写一个shell脚本,其中有很多条命令,让shell一次性把这些命令执行完,而不必一条一条的敲命令. shell脚本和编程语言很相似,也有变量和流程控制语句,但是shell脚本是解释执行的,不需要进行编译,shell从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到shell提示符下执行. 二

javascript 基础学习整理

1. javascript是动态语言,脚本语言,弱类型语言. 2. javascript代码在html文件中的位置安排,放在<body></body>内部与外部的区别.如何引用外部的javascript文件. 3. javascript单行注释与多行注释. 4. javascript如何申明变量. 5. javascript分支语句的使用. 6. javascript如何弹出警告框.确认框. 7. javascript函数的编写:带参数.带返回值. 8. javascript函数循

shell脚本的基础

shell脚本的基础 shell 基本语法 变量 什么是shell? 先看一个简单的shell程序 [[email protected]~]# cat linux.sh      #查看linux.sh文件内容#!/bin/bash echo -e "\e[1;31m linuxtouch  \e[0m"   #红色字体输出 linuxtouch[[email protected] ~]# sh linux.sh  linuxtouch  [[email protected] ~]#

shell脚本的基础1

shell脚本的基础 1.shell 脚本的编写规范 2 变量与特殊变量应用 3局部变量与全局变量 4 测试判断表达式 在一些复杂的Linux维护工作中,大量重复的输入和交互操作不但费时费力,而且容易出错. 编写脚本的好处: 批量的处理,自动化的完成维护,减轻管理员的负担. linux的shell脚本是一种特殊的应用程序,常见的shell解释器有很多种使用不同的shell时期内部指令命令提示方式方面会存在一些区别,可以通过/etc/shells文件查看 [[email protected] ~]

第九章、shell脚本编程基础

第九章.shell脚本编程基础 本章内容 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 程序的执行方式 计算机:运行二进制指令 编程语言: 低级:汇编 高级: 编译:高级语言-->编译器-->目标代码 java,C# 解释:高级语言-->解释器-->机器代码 shell, perl, python (系统后台

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

shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash if [ $# -ne 1 ] then echo "请输入一个参数" exit else echo "参数正确" newfile=$1 fi #echo `grep "^#\!" ${newfile}` if ! grep "^#\!" ${newfile} &>/

javascript 基础学习整理 二 之 html对象总结,参考W3C

Anchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向输出流写文本 使用 document.write() 向输出流写 HTML 返回当前文档的标题 返回当前文档的 URL 返回当前文档的 referrer 返回下载当前文档的服务器域名 使用 getElementById() 使用 getElementsByName() 打开一个新的文档,添加一些文本,然后

文本处理工具和正则表达式、shell脚本编程基础-第四周

第四周-文本处理工具和正则表达式.shell脚本编程基础1. 统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户的个数,并将用户都显示出来grep -v '/sbin/nologin' /etc/passwd|wc -lgrep -v '/sbin/nologin' /etc/passwd|cut -d: -f12. 查出用户UID最大值的用户名,UID及shell类型.cut -d: -f1,3,7 /etc/passwd|sort -t: -k2 -nr

linux学习之shell脚本 ------- 变量

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 今天来看一下Shell中的一些变量. 变量类型: Shell中有以下几种变量: 1) 本地变量 2) 环境变量 3) 位置变量 4) 标准变量 5) 特殊变量 1) 本地变量 本地变量在用户现在的Shell生命周期的脚本中使用. 用法: variable-name=value set: 可以显示本地所有的变量 注意,本地变量如果加上readonly,则该本地变量不能被修改,