【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脚 ...
随机推荐
- 基于逆波兰式的JAVA计算器
请看下方↓↓
- JS_全
<script src="jquery-1.9.1.js" type="text/javascript"></script> <s ...
- PostgreSql问题:ERROR: column "1" does not exist
摘录自:http://blog.csdn.net/shuaiwang/article/details/1807421 在PostgreSQL中,不论是在pgAdmin中还是在命令行控制台里面,在SQL ...
- HEXO+Github,搭建属于自己的博客
摘录自:http://www.jianshu.com/p/465830080ea9 1. github的准备 账号 密码 建立Repository建立与你用户名对应的仓库,仓库名必须为[your_us ...
- [知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原
通常在MySQL数据库的备份和恢复的时候,多是采用在cmd中执行mysql命令来实现. 例如: mysqldump -h127.0.0.1 -uroot -ppass test > d:/tes ...
- 如何 Scale Up/Down Deployment?- 每天5分钟玩转 Docker 容器技术(126)
伸缩(Scale Up/Down)是指在线增加或减少 Pod 的副本数.Deployment nginx-deployment 初始是两个副本. k8s-node1 和 k8s-node2 上各跑了一 ...
- Centos7-卸载自带的jdk 安装jdk8
卸载JDK Centos7一般都会带有自己的openjdk,我们一般都回用oracle的jdk,所以要卸载 步骤一:查询系统是否以安装jdk #rpm -qa|grep java 或 #rpm ...
- Xpath语法学习
贴几个我学习Xpath的参考 1 基本使用的参考 XPath学习:基本语法(一) 2 较为详细且清晰例子参考,推荐 XPath 详解,总结 3 详细语法参考 Xpath语法格式整理 4 官方参考 XP ...
- jspf与jsp的区别
如果想把一个jspf的文件引入(incurred)到一个jsp页面中,只能使用"@include"指令引入 如果使用<jsp:include>引入,jspf文件中的内容 ...
- awk ‘! a[$0]++’ 去重
awk '! a[$0]++' 怎么理解? 这是一个非常经典的去重复项的awk语句,虽然短小,不过涉及到了不少知识点,下面一一解读: <1> :"!" 即非. < ...