Shell脚本练习

#!/bin/bash
echo "当前日期时间为:"`date`
echo "Hello World !"

#使用变量:可以用单引号,也可以用双引号
your_name="Wang"
echo $your_name
echo ${your_name}
str=‘ShellStudy‘
echo ${str}
#只读变量:不能改变它的值
myUrl="www.wnn1.com"
readonly myUrl
echo "My URL is ${myUrl}"
myUrl="www.wnn.com"
#删除变量:只读变量不能删除
unset myUrl
echo "My URL is ${myUrl}"
#获取字符串长度
echo "str字符串为ShellStudy,字符串长度为:" ${#str}
#提取子字符串:以下实例从字符串第 2 个字符开始截取 4 个字符
string="wangniannian"
echo "截取字符串"${string:1:4}
#查找子字符串
echo `expr index "$string" w`

#for循环
for skill in Ada Coffe Action Java;do
echo "I am good at ${skill}Script"
done

#数组
array_name=(wang love zhu)
#读取数组
echo "数组的第二个元素为:"${array_name[1]}
#使用@可以获取数组中的所有元素
echo "数组的所有元素为:"${array_name[@]}
#取得数组元素的个数
length=${#array_name[@]}
echo "数组的元素个数为:"${length}
#取得数组单个元素的长度
lengthn=${#array_name[2]}
echo "数组的第三个元素的长度为:"${lengthn}

#Shell 传递参数
echo "执行的文件名为:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"

#Shell 运算符:原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
#expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

#算数运算符
val=`expr 2 + 2`
echo "2+2=$val"

a=10
echo "a的值是${a}"
b=20
echo "b的值是${b}"

val_jia=`expr $a + $b`
echo "a+b= $val_jia"

val_jian=`expr $a + $b`
echo "a-b= $val_jian"

# *前面需要有\需要转义
val_cheng=`expr $a \* $b`
echo "a*b=$val_cheng"

val_chu=`expr $b / $a`
echo "b/a=$val_chu"

val_yu=`expr $b % $a`
echo "b%a=$val_yu"

if [ $a == $b ]
then echo "a等于b"
fi
if [ $a != $b ]
then echo "a不等于b"
fi

#关系运算符
#-eq 检测两个数是否相等,相等返回true
if [ $a -eq $b ]
then echo "$a -eq $b : a等于b"
else echo "$a -eq $b : a不等于b"
fi
#ne 检测两个数是否相等,不相等返回true
if [ $a -ne $b ]
then echo "$a -ne $b: a不等于b"
else echo "$a -ne $b: a等于b"
fi
#gt 检测左边的数是否大于右边的,如果是,返回true
if [ $a -gt $b ]
then echo "$a -gt $b: a大于b"
else echo "$a -gt $b: a不大于b"
fi
#lt 检测左边的数是否小于右边的,如果是,返回true
if [ $a -lt $b ]
then echo "$a -lt $b: a小于b"
else echo "$a -lt $b: a不小于b"
fi
#ge 检测左边的数是否大于等于右边的,如果是,返回true
if [ $a -ge $b ]
then echo "$a -ge $b: a大于或等于b"
else echo "$a -ge $b: a小于b"
fi
#le 检测左边的数是否小于等于右边的,如果是,返回true
if [ $a -le $b ]
then echo "$a -le $b: a小于或等于b"
else echo "$a -le $b: a大于b"
fi

#布尔运算符

#逻辑运算符

#字符串运算符

#文件测试运算符

#Shell 输入、输出重定向
#/dev/null 文件:如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
#/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

#输出重定向
who > users
#追加用>>
echo "菜鸟教程:www.runoob.com" >>users

#输入重定向
wc -l users

#Shell函数
demoFun(){
echo "这是我的第一个shell函数!"
}
echo "---函数开始执行---"
demoFun
echo "---函数执行完毕---"

#Shell 流程控制

if [ $(ps -ef | grep -c "ssh") -gt 1 ]
then echo "true"
else echo "false"
fi

#grep命令
#查找包含wang文本的所有行并打印在屏幕上
grep "wang" /Users/wangniannian/test.sh
#不区分大小写的查找wang文本的所有行并打印在屏幕上
grep -i "wang" /Users/wangniannian/test.sh
#查找包含wang文本的所有行并将匹配行的总数打印在屏幕上
grep -c "wang" /Users/wangniannian/test.sh
#查找包含wang文本的所有行并打印在屏幕上同时显示行号
grep -n "wang" /Users/wangniannian/test.sh
#查找不包含wang文本的所有行并打印仔屏幕上
grep -v "wang" /Users/wangniannian/test.sh

#awk
#用法一:awk ‘{[pattern] action}‘ {filenames} # 行匹配语句 awk ‘‘ 只能用单引号
#每行按空格或TAB分割,输出文本中的1、4项
awk ‘{print $1,$4}‘ log.txt
#格式化输出
awk ‘{printf "%-8s %-10s\n",$1,$4}‘ log.txt

#用法二:awk -F #-F相当于内置变量FS, 指定分割字符,比如用,分割
awk -F, ‘{print $1,$2}‘ log.txt
#或者使用内建变量
awk ‘BEGIN {FS=","} {print $1,$2}‘ log.txt
#使用多个分隔符,先使用空格分割,然后对分割结果再使用“,”分割
awk -F ‘[,]‘ ‘{print $1,$2,$5}‘ log.txt

#用法三:awk -v 设置变量
awk -va = 1 ‘{print $1,$1+a}‘ log.txt

awk -va = 1 -vb = s ‘{print $1,$1+a,$1b}‘ log.txt

#用法四:awk -f {awk脚本} {文件名}
awk -f cal.awk log.txt

#运算符
#过滤第一列大于2的行
awk ‘$1>2‘ log.txt
#过滤第一列等于2的行
awk ‘$1==2 {print $1,$3}‘ log.txt
#过滤第一列大于2并且第二列等于‘Are’的行
awk ‘$1>2 && $2=="Are" {print $1,$2,$3}‘ log.txt

#xargs

#read

#find
find ~ -name adb

find . -name adb

时间: 2024-10-10 05:48:22

Shell脚本练习的相关文章

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

shell脚本交互:expect学习笔记及实例详解

最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,Li

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

利用shell脚本批量修改表

最近公司里因为开发新功能,程序员需要快速在某一个库里的所有表添加字段,于是就用shell脚本简单快速实现批量修改表添加字段 #!/bin/bash export mysql_bin=/usr/local/mysql/bin export database=database export tables=`$mysql_bin/mysql -Bse "use ${database};show tables;"` for i in ${tables}         do          

Shell 脚本模拟 milter 实现黑白名单及关键词过滤

程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键词信息,则拒绝接收   该邮件;否则,接收该邮件. Usage: sh mailfilter.sh  [-r reject-addr] [-a add-addr][-k keywords]########################################################

Linux Shell脚本攻略(1.12)

1.12 函数和参数 和其他脚本语言一样,Bash同样支持函数,并且可以传递参数. 1.12.1 函数定义和传参 #!/bin/bash function fname() #也可以用fname()代替 { echo $1,$2; #访问参数1和参数2 echo "[email protected]"; #以列表的方式一次性打印所有参数 echo "$*"; #类似于[email protected],但是参数被作为单个实体 return 0; #返回值 } fnam

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装 首先在网上用gfsoso.com来搜索下载mysql软件包mysql-5.5.28-linux2.6-x86_64.tar.gz,再用 winSCP把mysql上传到服务器上,上传位置可根据个人喜好,我个人一般放在服务器的/usr/local/src目录下. 此处我们是先命令行下实现一次,而后所有操作全部用shell脚本自动实现. 个人环境 centos 6.5 X86-64  所用空闲空间都做成了LVM. 准备工作