【linux之shell脚本】
一、简介
机器语言
汇编语言
高级语言
面向过程 C Shell Perl
面向对象 java python c++
强语言:先编译再执行 java c++
弱语言:边编译边执行 shell python php
魔数(magic number)
shebang 程序入口 必须放在第一行
#!/bin/bash
#
echo "hello,world."
写完一个脚本,如何执行获得结果?
①bash Script-file
②source Script-file = . Sicript-filecript-file
③chmod +x Script-file; ./Script-file
bash -x 看脚本执行的过程
二、变量
1、定义:
变量名=变量值
在内存中申请一个空间,取名叫“变量名”;然后将变量值存入该内存空间
一般情况下,一个变量只能存储一个变量值
2、分类
根据使用的范围,可以分为:
环境变量:能够在当前shell及其子shell中生效的变量
本地变量:只能在当前shell中生效的变量
局部变量:只能在当前的程序段中生效的变量
位置变量:$0, $1, $2, ...
特殊变量:$?, $$, $*, ...
定义环境变量:
1.export 变量名=变量值
2.declare -x 变量名=变量值
3.变量名=变量值 export 变量名
定义本地变量:
变量名=变量值
定义局部变量:
local 变量名=变量值
4、获得变量值的方法
echo ${变量名}
ANIMAL=pig
there are 3 ${ANIMAL}s
3、变量名的命名规则
1.只能是字母或下划线开头,并且整个名字只能包括字母、数字、下划线
2.变量名严格区分大小写
3.新设置的变量名不要跟已经存在并生效的变量名重复
4.定义新的变量名的时候,最好做到见名知义
4、位置变量
$1,$2,$3,...
shift
与位置有关的几个特殊变量
$#:参数总数
$*,$@:列表显示所有参数
三、测试语句test
条件测试语句
test Condition
[ Condition ]
[[ Condition ]]
整数测试
-eq:等于
-ge:大于等于
-gt:大于
-le:小于等于
-lt:小于
-ne:不等于
字符串测试
-n 不为空
-z 为空
=、==:字符串的内容是否相同
!=:字符串的内容是否不同
[ $A != $B ]
文件状态测试
-d:测试指定的文件是否为目录
-e:测试指定的文件是否存在
-f:测试指定的文件是否为普通文件
-r:测试指定的文件对于当前用户是否有读权限
-w:测试指定的文件对于当前用户是否有写权限
-x:测试指定的文件对于当前用户是否有执行权限
四、算术运算
shell中的算术运算 + - * / %(模运算)
A=2
B=3
.let C=$A+$B
echo $C .C=$[$A+$B] C=$[$A**$B] 2的三次方 .C=$(($A+$B)) .C=`expr $A + $B`
自身加一
let A++
let A+=1
四、脚本的控制结构
顺序结构:shell脚本执行的默认结构
分支机构:也叫条件选择结构,只有符合条件的命令才会被执行
循环结构:在符合条件的情况下重复执行某些命令
if条件分支结构
1.单分支结构(只处理条件为真的时候的命令语句)
if condition;
then
statement1
......
fi
2.双分支结构(不管条件为真为假,都有命令要被处理)
if condition;then
statement1
......
else
statement1
fi
3.多分支结构
if condition;then
statement1
......
elif condition2;then
statement2
......
else
statement1
fi
exit #
在执行脚本的过程中遇到exit命令,不再执行后面的其他命令,直接推出脚本。在退出脚本之后,返回执行状态返回值为#。0~127(3~126 )
循环结构
1.for循环:
for 变量名 in 变量值列表;do
循环体(一组重复执行的语句)
done
变量值列表
.一组整数:
①{..} 从1到100
②seq 从1到100
③seq #
.`cut -d: -f /etc/passwd SUM=
for I in {..};do
let SUM+=$I
done
echo #SUM for ((I=;I<;I+=));do
case
case 变量值 in
Condition1)
statment1
...
;;
Condition2)
statment2
...
;;
ConditionN|ConditionN+)
statmentN
...
;;
*)
statment
...
;;
esac
显示用户信息,printuser root
vim printuser
#!/bin/bash
#
case $ in
)
echo `grep "^$1\>" /etc/passwd | cut -d: -f$` ;;
)
echo `grep "^$1\>" /etc/passwd | cut -d: -f$` ;;
)
echo `grep "^$1\>" /etc/passwd | cut -d: -f$` ;;
)
echo `grep "^$1\>" /etc/passwd | cut -d: -f$` ;;
)
echo `grep "^$1\>" /etc/passwd | cut -d: -f$` ;;
)
echo `grep "^$1\>" /etc/passwd | cut -d: -f$` ;;
)
echo `grep "^$1\>" /etc/passwd | cut -d: -f$` ;;
*)
echo "Usage: `basename $0` Username {1-7}"
;;
esac
服务启动脚本
service.sh {start|stop|restart|status}
vim service.sh
#!/bin/bash
#
case $ in
start)
echo "starting service ..." ;;
stop)
echo "stopping service ..." ;;
restart)
echo "Before starting, we must stop it." ;;
status)
echo "service is running ..." ;;
*)
echo "`basename $0` {start|stop|restart|status}" ;;
esac
循环
while CONDITION;do 如果条件为真就执行循环体 当
循环体
done
当CONDITION为真的时候,执行循环体中的语句,否则退出循环 until CONDITION;do 直到
循环体
done
当CONDITION为假的时候,执行循环体中的语句,否则退出循环 死循环
while : ;do
循环体
done 循环嵌套 continue
立刻结束本次循环,进入下一次循环
break
循环体的执行会强行中断,退出循环,继续执行脚本其他命令 [ $SUM -gt ] && break I=
while read LINE;do
USERID=`echo $LINE | cut -d : -f `
[ $UERID -lt -a $USERID -gt ] && continue
echo $LINE && let I++
[ $I -eq ] && break
done < /etc/passwd I=
USERLIST=`sort -n -t ":" -k /etc/passwd
for j in $USERLIST;do
USERID=`echo $j | cut -d : -f `
[ $UERID -lt -a $USERID -gt ] && continue
echo $j && let I++
[ $I -eq ] && exit
done
【linux之shell脚本】的更多相关文章
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- 使用C#给Linux写Shell脚本(下篇)
在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...
- Linux/Unix shell 脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...
- Linux常用Shell脚本珍藏【转载】
我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...
- 从windows到linux的shell脚本编码和格式问题
从windows到linux的shell脚本编码和格式问题 从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...
- Linux执行shell脚本方式及区别&命令后台运行
Linux执行shell脚本方式及区别&命令后台运行 http://blog.csdn.net/heqiyu34/article/details/19089951/
- Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间
Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...
- Linux:从windows到linux的shell脚本编码和格式
从windows到linux的shell脚本编码和格式问题 异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误, ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- linux下shell脚本执行jar文件
最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...
随机推荐
- 如何检测浏览器url变化
用户通过“点击触发”,“操作历史”,“直接访问URL”的方式修改当前URL.这三种触发方式会使浏览器做出不同的行为 html5提供了两种方式在页面中操作历史 history.pushState(sta ...
- js数组操作记录
一 .splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 in ...
- 织梦dedecmsV5.7联动类型无法显示的处理方法
最近织梦dedecms在新的功能中添加了一个联动类型这样的一个功能.所谓的联动类型,类似于一级目录下有二级目录,二级目录下又有三级目录,可以理解为数据结构中树形结构.级和级之间都是有着联系的.为了让大 ...
- Uva10129 - Play on Words 欧拉通路 DFS
题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105& ...
- [原创]自动获取当前URL所属主域的JS方法(适合多级域名)
工作中要用到,就随手写了个,不是什么难题,分享给有需要的朋友(主要是很久没更新博客了). 如果有特殊域名,比如“.tj.cn",请将".tj"加到hostExts数组中( ...
- RocketMQ-顺序消费
看了https://www.jianshu.com/p/453c6e7ff81c这篇博客,得出顺序消费的结论."要实现严格的顺序消息,简单且可行的办法就是:保证生产者 - MQServer ...
- Redis-安装、启动
安装Redis 下载redis安装包http://download.redis.io/redis-stable.tar.gz 解压安装包tar xzf redis-stable.tar.gz 安装cd ...
- C# 多线程复习笔记
编码的日子其实也有一段时间了,但是,作为一个客户端程序,因为自己是做游戏开发的,一直没有对线程这个概念比较模糊吧. 记录下线程的整理学习路线.原文:http://www.cnblogs.com/min ...
- CentOS 通过yum来升级php到php5.6
在文章中,我们将展示在centOS系统下如果将php升级到5.6,之前通过yum来安装lamp环境,直接升级的话,提示没有更新包,也就是说默认情况下php5.3.3是最新 1.查看已经安装的php版本 ...
- 常用Nagios配置命令
cd /usr/local/nagios/etc vim nagios.cfg /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios ...