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