【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脚 ...
随机推荐
- Spark算子--SortBy
转载请标明出处http://www.cnblogs.com/haozhengfei/p/39edcbb10b5076599c0e5609b7136b88.html SortBy--Transforma ...
- TPshop学习(8)微信支付
http://blog.csdn.net/phper8/article/details/76383415 学习内容: https://www.kancloud.cn/tpshop/thinkphp5/ ...
- 修改织梦默认栏目页、文章页URL命名规则,简化目录结构
版权声明:本文为博主原创文章,未经博主允许不得转载. 用织梦Dedecms建站,建议优化系统默认的URL结构,这样能简化网站目录深度,利于搜索引擎收录. 现在织梦的默认文章命名规则是 {typedir ...
- 【编程技巧】addSubview和insertSubview的区别
addSubview 是将view加到所有层的最顶层 相当于将insertSubview的atIndex参数设置成view.subviews count 即 [view addSubview:onev ...
- PostgreSql 分页limit
摘录自:http://jingyan.baidu.com/article/a17d528538119b8098c8f2ca.html 语法: select * from persons limit ...
- python_求1-2+3-4+......-100的值
求1-2+3-4+5---100 = ? 逻辑整理: -- 本质上可以转换一下,1+3+5+--+99 -(2+4+--+100) 加减部分间隔都为2,先求1+3+5+--+99的值, 再求2+4+- ...
- 【Spring实战】--1Spring的核心
最近面试总会涉及Spring的优点,SpringMVC与Struts2的比较,生活慢慢稳定下来,这些面试还是应了那句话“只顾盲目拉车,不会低头看路”,回过头来还是要好好研究一下Spring,如果仅仅是 ...
- java 包命名规范
转载 原文地址:http://blog.csdn.net/kongjiea/article/details/45365753 Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统 ...
- 配置struts2拦截器
<!-- 配置拦截器 --> <interceptors> <!-- 声明拦截器 --> <inte ...
- CentOS 7修改网卡名称
CentOS 7 修改网卡名为eth0 标签: linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 CentOS7的网卡名称太长,这不符合我们的使用习惯, ...