【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脚 ...
随机推荐
- 火狐浏览器怎么查看页面加载了那些js文件,那系js文件有作用
方法一: 右击查看原代码,点击js链接如果能够看到文件内容,证明加载成功 方法二: 按F12键,如果控制台没有加载错误,证明加载成功:
- navicat将多个表导出为一个sql文件
1.shift选中多个表 2右键选择--转储sql文件---结构和数据
- CentOS系统下Redis安装和自启动配置的步骤
相信大家都知道Redis是一个C实现的基于内存.可持久化的键值对数据库,在分布式服务中常作为缓存服务.所以这篇文章将详细介绍在CentOS系统下如何从零开始安装到配置启动服务.有需要的可以参考借鉴. ...
- [机器学习]模型评价参数,准确率,召回率,F1-score
很久很久以前,我还是有个建筑梦的大二少年,有一天,讲图的老师看了眼我的设计图,说:"我觉得你这个设计做得很紧张".当时我就崩溃,对紧张不紧张这样的评价标准理解无能.多年后我终于明白 ...
- 5分钟把任意网站变成桌面软件--windows版
本文源自于segmentfault的一篇专栏文章:https://segmentfault.com/a/1190000012924855 只不过这篇是MAC版本的,所以我试了下windows版的: ...
- [JS]Math.random()
参考网址:http://www.soulteary.com/2014/07/05/js-math-random-trick.html [JS]Math.random()的二三事 看到题目,如果大家平时 ...
- 用IDEA/WebStrom 提交本地项目到Git/码云等
以码云为例: 在码云上创建新的项目. webstrom/idea 打开本地项目
- Javascript学习--时间
digit = [ [ [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1, ...
- python_11_字符编码
什么是字符编码? --世界上有很多国家,每个国家都有自己独特的语言,所以在计算机普及的当今世界, 每个国家都有自己的字符编码,本国的软件运行在其他国家的机器上,会出现乱码, 有utf-8,gbk等各种 ...
- The server's host key is not cached in the registry. You have no guarantee that the server……
使用putty中的pscp.exe ,可以通过脚本方式实现windows向linux上传文件,但pscp.exe第一次运行时必须手工输入确认信息,本文主要解决掉初次运行时的人工交互,彻底实现静默运行. ...