一、简介

机器语言
汇编语言
高级语言
面向过程 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脚本】的更多相关文章

  1. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  2. 使用C#给Linux写Shell脚本(下篇)

    在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...

  3. Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  4. Linux常用Shell脚本珍藏【转载】

    我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...

  5. 从windows到linux的shell脚本编码和格式问题

    从windows到linux的shell脚本编码和格式问题   从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...

  6. Linux执行shell脚本方式及区别&命令后台运行

    Linux执行shell脚本方式及区别&命令后台运行 http://blog.csdn.net/heqiyu34/article/details/19089951/

  7. Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间

    Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...

  8. Linux:从windows到linux的shell脚本编码和格式

    从windows到linux的shell脚本编码和格式问题 异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误, ...

  9. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  10. linux下shell脚本执行jar文件

    最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...

随机推荐

  1. JSP内置对象1(request,response,session)

    request对象 response对象:请求重定向与请求转发的区别. session对象:表示客户端与服务器的一次会话,也就是用户浏览网站所花费的时间.在服务器的内存中保存着不同用户的session ...

  2. 【WebApi系列】浅谈HTTP

    [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...

  3. ngRx 官方示例分析 - 5. components

    组件通过标准的 Input 和 Output 进行操作,并不直接访问 store. /app/components/book-authors.ts import { Component, Input ...

  4. eclipse中git解决冲突

    摘录自http://blog.csdn.net/rosten/article/details/17068285 1. 工程->Team->同步 2.从远程pull至本地,就会出现如下内容 ...

  5. Redis-配置认证密码

    1.找到redis.conf,配置密码 2.要重新启动一下redis 3.用redis-cli重新登陆,我们查询的时候提示"Authentication required"查询失败 ...

  6. java面向对象——类

    一.类 类(class)是构造对象的模板或蓝图.由类构造(construct)对象的过程称为创建类的实例(instance). 用 java 编写的所有代码都位于某个类的内部.标准的Java 库提供了 ...

  7. linux各种顔色代表

    @linux中的各文件的颜色表示什么 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰色:表示其它 ...

  8. Linux指令--route

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  9. finally中关闭资源

    对finally中关闭资源是否还要使用try...catch老是感到迷惑,现在存个例子,省的忘了 public StringBuilder readTxtFile(File file){ String ...

  10. 计算器(Ext)

    <html> <head> <title>计算器</title> <meta charset="UTF-8"> < ...