本文主要介绍Shell脚本的基本概念和简单应用。包括:
- Shell & Shell Script概念
- Shell脚本语言
- Shell语言应用实例
Shell & Shell Script概念
Shell
在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
Shell Script
Shell脚本与Windows/Dos下的批处理相似,是用Shell命令预先放入到一个文件中,方便一次性执行的一个程序文件;主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高;它使用Linux/Unix下的命令。
Shell 环境
Shell 编程跟java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux系统
大多数Linux系统默认的Shell是Bash(Bourne Again Shell),Linux绝对路径为/bin/bash。
在一般情况下,人们并不区分 Bourne Shell (sh)和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为#!/bin/bash(告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序)。
windows系统
Windows7系统下的cmd可以具有shell类似的功能。要想在windows环境下使用sh/bash,有如下几种方法:
1.安装Git,其安装目录bin中就有sh/bash,这时候只要将该文件夹添加到环境变量中就可以方便的使用sh/bash了!
2.使用远程登录软件登录一个Linux服务器,这样自然可以操作sh/bash了。工具有Putty、SecureCRT等
效果如图:
Shell命令
Shell命令比较丰富,这里简单介绍一下常用到的Shell命令。
文件与文件夹的查看、新建与删除
命令 | 说明 |
---|---|
cd [dir] | 进入指定目录 |
../ | 上级路径 |
./ | 当前目录 |
cd | 进入管理员目录 |
ls (-a) | 列出当前文件夹中文件(所有文件包括隐藏文件) |
cat [file name] | 查看指定文件 |
mkdir [dir name] | 在当前目录创建文件夹 |
touch [file name] | 在当前目录创建文件 |
echo [str] | 显示字符串 |
echo [str] >> [file name] | 将字符串追加写入指定文件 |
echo [str] > [file name] | 将字符串覆盖写入指定文件 |
rm [file name] | 移除指定文件 |
rmdir [dir name] | 移除指定文件夹 |
编程调试常用命令
命令 | 说明 |
---|---|
javac [file name] | 编译指定java程序(要带.java后缀名) |
javac * | 编译当前目录所有java程序 |
java [class name] | 运行指定java程序(不需要带后缀名) |
cl /c /D /EHsc [file name] | 编译c.cpp文件 |
link [file name] | 链接obj文件,生成可执行文件 |
bash/sh [file name] [pa 1 2 3 …] | 运行Shell文件 |
Shell 语言及示例
Shell 语法
shell语法内容比较多,这就不列举了。可以参看兄弟连出品的Shell编程讲解,很不错 :
兄弟连Shell编程课程PDF下载
实例:git管理
利用shell语法编写了一个实现git管理的脚本,能够相对方便简单的实现:
本地版本库创建
添加到暂存区
提交到缓存区
推送到远程版本库
以下为主要的代码:
#创建本地版本库并提交修改到本地版本库,之后提交
if [ !-d ./.git ]
then
#echo "git is exsisted!"
git init
#echo git init
fi
#判断参数个数,根据参数个数,设置相应的参数
if test $# -eq 3
then
#3个参数的时候,依次对应要提交的文件名、提交时的注释、远程库名称
file=$1
comm=$2
rep=$3
elif test $# -le 2
then
#2个参数的时候,依次对应提交时的注释、远程库名称,默认提交所有文件
file="."
comm=$1
rep=$2
fi
git add $file
git commit -m "$comm"
#若第二个参数不为空,则提交到以最后一个参数命名的远程版本库,并返回提交结果!
if test $rep
then
#提交至远程版本库
REMOTE=`git remote`
#echo $REMOTE
if test $REMOTE
then
#echo remote add
if [ $REMOTE=$ORIGIN ]
then
git remote rm origin
fi
fi
git remote add origin https://github.com/sunpro/$rep.git
git push -u origin master
if [ $? -eq 0 ]
then
echo push succeed!
else
echo push failed!
fi
fi
用shell运行如图: