Shell脚本系列教程二: 开始Shell编程

Shell脚本系列教程二: 开始Shell编程

2.1 如何写shell script?

(1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器;

(2) 脚本写好之后, 要给脚本设置可执行权限: 语法为: chmod  [option]  mode  script-name

$ chmod +x script-name  # 对所有用户(a, 默认)
$ chmod 775 script-name

这里, 775这3个数字分别表示此文件对于用户(u), 组(g), 其他用户(o)的权限设置, 比如: 第一个7,二进制为111,表示分别表示赋予了用户此文件的读, 写, 执行权限;

who: u(用户), g(组), o(其他), a(所用用户, 默认);  opcode: +(增加权限), -(删除权限), =(重新分配权限);  permission: r(读权限), w(写权限), x(执行权限), s(设置用户ID号), t(粘着位)

1 $ chmod u+x file      # 给此file的用户添加执行权限
2 $ chmod 751           # 给此file的用户读写执行权限,file所在组读,执行权限,其他用户执行权限
3 $ chmod u=rwx,g=rx,o=x file  # 和上一条语句含义相同
4 $ chmod =r file           # 给所有用户分配读权限(默认的用户为a,这里就是默认了)
5 $ chmod 444 file        # 和上条语句完全相同
6 $ chmod a-wx,a+r file  # 同上条语句, - 表示去除权限
7 $ chmod +R u+r directory  # 递归地给directory目录下所有文件和子目录分配读的权限

(3) 使用下面的命令来执行脚本:

$ bash script-name 或 $ sh script-name 或 $ ./script-name (你的终端当前路径是本脚本所在路径, 但是还是要加上"./", 这样才会从当前文件夹来找这个文件);如果只有一个.(dot)表示在当前的shell里面执行给定的文件: 语法为: . command-name (可以参考[2]).

下面, 写下自己的第一个shell脚本: 命名为first

$ clear
$ echo "Hello World"

对脚本进行保存之后,你可能会使用下面的命令来执行脚本:

$ ./first

这种方式不得行,因为这个脚本现在还没有执行权限,要给脚本加上执行权限方可执行: 屏幕会被清空,Hello World将会被打印到屏幕上.

$ chmod 775 first
$ ./first 
脚本命令 含义
clear 清空屏幕
echo "Hello World" 在屏幕上输出信息或者变量的值,这里使echo命令的一般使用方法: echo "Message"

练习: 写如下的脚本, 保存然后执行, 观测输出

ginfo

1 clear
2 echo "Hello $USER"
3 echo "Today is \c";date
4 echo "Number of user login :\c";who | wc -l
5 echo "Calendar"
6 cal
7 exit 0

输出:

Hello wang
Today is \c
2016年 11月 04日 星期五 10:36:15 CST
Number of user login :\c
2
Calendar
      十一月 2016
日 一 二 三 四 五 六
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30    

2.2 Shell中的变量

在Linux(Shell)中, 有两种类型的变量:

1) 系统变量: 由Linux自定义和生成的, 都是用大写字母.

2) 用户定义的变量(UDV): 由用户定义和生成的变量.

一些重要的系统变量如下表所示:

系统变量 含义
BASH shell所在路径: 如/bin/bash, 此命令和SHELL相同
BASH_VERSION shell的版本,如: 4.3.11(1)-release
COLUMNS 你的终端的coloums, 如80; 我电脑上,终端最大化后, 此值变成205
HOME 电脑的home路径, 如/home/wang
LINES 和COLUMNS含义差不多
LOGNAME 当前用户名称, 如wang
OSTYPE Os类型: 如linux-gnu
PATH 我们的路径设置
PS1 Our prompt settings
PWD 当前的工作路径
SHELL shell所在路径: 如/bin/bash
UESRNAME 当前登陆到这台PC的用户名称

如果想要打印输出当前的home路径, 可以:

$ echo $HOME      # 输出: /home/wang

但是下面可以这样吗? 下面这条命令是ok的, 不会出现任何错误, 但是它会输出HOME, 而不是HOME所指代的内容, 要在HOME前面加上$才行.

$ echo HOME    # 输出: HOME

2.3 读语句(read)

从键盘上读取数据存放在变量中: 语法: read var1, var2, ..., varN

编写下面的脚本文件, 提示用户输入名字, 用户使用键盘输入名字, 存放在指定的变量中, 然后显示:

$ vi sayH
echo "Your first name please: "
read fname   # 用户的输入存放在fname里面!!!
echo "Hello $fname, Lets be friend!"

执行下面的语句运行sayH:

$ chmod +x sayH
$ ./sayH

Your first name please:
Zhao
Hello Zhao, Lets be friend!

2.4 通配符

参考文献:

[1] Linux Shell Scripting Tutorial: http://www.freeos.com/guides/lsst/index.html

[2] http://blog.csdn.net/mci2004/article/details/7182829

时间: 2024-10-12 02:47:36

Shell脚本系列教程二: 开始Shell编程的相关文章

Linux之部分shell脚本练习(二)

while CONDITION;do    statementdone 进入循环:条件满足退出循环:条件不满足 until CONDITION;do    statment    ...done #!/bin/bash#read -p "Input something:" STRING while[ $STRING != 'quit'];do    echo $STRING | tr 'a-z' 'A-Z'    read -p "Input something:"

shell脚本应用(二)

防伪码:会当凌绝顶,一览众山小!  第六章 shell脚本应用(二) 前言:为了使shell脚本具有一定的"判断"能力,根据不同的条件来完成不同的管理任务.使脚本具有一定的"智能". 目标:学会使用条件测试操作+if条件语句+实验(构建postfix邮件系统并测试系统管理和维护) 一. 条件测试操作 1. 文件测试(根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读.可写.可执行) -d(是否为目录) -e(目录或文件是否存在) -f(是否为文件)

什么是Shell?Shell脚本是什么?shell脚本执行过程?学习Shell编程必看!

1.什么是Shell? 首先请看图----自动略过各位都是新手(CaiJi) 聪明的你如图所得: Shell=命令解释器它的作用是执行并解释用户输入的命令及脚本,用户键入一条命令,Shell就执行并解释一条.键入命令,就可以立即得到回应的对话方式,被称之为为交互式.Shell它存在于操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户,当我们输入系统用户名和密码,登录到Linux后的所有操作都是由Shell解释并执行的. 所以

kettle系列教程二

 kettle系列教程二 1.Hello World 示例 通过这个例子,介绍kettle的一些基础知识及应用: n 使用Spoon工具 n 转换的创建 n 步骤及连线 n 预定义变量 n 在Spoon中预览和执行 n 使用pan工具在终端窗口执行转换 概述 我们要实现的目标是:通过一个包含人名称的CSV文件,创建一个XML文件,内容是针对每个人添加上问候. 如果csv文件内容如下: last_name, name Suarez,Maria Guimaraes,Joao Rush,Jenni

C#微信公众号开发系列教程二(新手接入指南)

http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微

shell脚本中执行另一个shell脚本

分类: 可以在一个shell脚本中执行另一个shell脚本(或非可执行文件,主要用于取得一些变量的值),方法是: . 文件名(包括路径) 或 变量=文件名(包括路径) . $变量 注意,圆点后面有个空格. 这样,在本shell脚本的后面部分就可以引用其他文件中声明的一些变量. 当再用这些变量去执行第3个脚本时,我不知是怎么回事,总是有些莫名其妙的错误,发现只有这个文件中不存在空行才行,哪怕只有一个注释符,都不会出错,就是不能有空行. 其实我想应该也不是这个问题,而是windows和linux处理

CRL快速开发框架系列教程二(基于Lambda表达式查询)

本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框架系列教程四(删除数据) CRL快速开发框架系列教程五(使用缓存) CRL快速开发框架系列教程六(分布式缓存解决方案) CRL快速开发框架系列教程七(使用事务) CRL快速开发框架系列教程八(使用CRL.Package) CRL快速开发框架系列教程九(导入/导出数据) CRL快速开发框架系列教程十(

Linux shell脚本中调用另一个shell(exec、source、fork)

  在运行shell脚本时候,有三种方式来调用外部的脚本,exec(exec script.sh).source(source script.sh).fork(./script.sh) exec(exec /home/script.sh): 使用exec来调用脚本相当于在当前shell执行了一条命令,不会产生新的进程,被执行的脚本会继承当前shell的环境变量.但是当exec调用完毕后,当前shell也会结束,剩下的代码不会执行. source(source /home/script.sh) 使

shell脚本进阶(二)

select 循环与菜单 select variable in list do 循环体命令 done select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入 用户输入菜单列表中的某个数字,执行相应的命令 用户输入被保存在内置变量REPLY 中. select 是个无限循环,因此要记住用break 命令退出循环,或用exit 命令终止脚本.也可以按ctrl+c 退出循环. select 经常和case 联合使用 与for 循环类似,可以省略