参考:http://www.cnblogs.com/Lynn-Zhang/p/5758287.html
1.sh/bash/csh/Tcsh/ksh/pdksh等shell的区别
-
sh(全称 Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。
Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。 -
bash(全称 Bourne Again Shell): LinuxOS 默认的,它是 Bourne Shell 的扩展。
与 Bourne Shell 完全兼容,并且在 Bourne Shell
的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell
中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。 - csh(全称 C Shell): 是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
-
Tcsh: 是 Linux 提供的 C Shell 的一个扩展版本。
Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。 - ksh (全称 Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
-
pdksh: 是 Linux 系统提供的 ksh 的扩展。
pdksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。
-
sh(全称 Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。
如果不好理解的话,Shell 个人感觉可以对应成 win 中的 bat,通过代码来实现一些自动定时任务,自动备份或者执行的任务。
1、chmod +x file 加上执行权限,否则会提示无执行权限。
2、注意执行脚本时候或者全目录,或者 ./file.sh ,如果不加的话,linux 默认会从PATH 里去找该 file.sh。
3、看了这篇教程,发现脚本后缀名可以任意修改,仍然可以正常运行。
4、语法类PHP,方便学习。
-
首先,什么是脚本语言?
脚本语言是像剧本一样教计算机办某个事情的语言。
比如你想让计算机执行复制某个文件的操作,如:cp ~/Desktop/*.txt ~/text
你可以在文本编辑器写入上边的代码并且保存此文件,然后你通过执行这个文本文件来执行上面的代码,并不需要重复手动输入上边的代码。
下面这句话是我在网上看到的:
所以脚本其实就是短小的、用来让计算机自动化完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的。
1.Shell 变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
ww=wwwwwwwwwwww
echo $ww
echo ${ww}
使用一个定义过的变量,只要在变量名前面加美元符号即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界.
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
myUrl="http://www.runoob.com"
删除变量
使用 unset 命令可以删除变量。语法:变量被删除后不能再次使用。unset 命令不能删除只读变量。
aaarticlea/png;base64,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" alt="" />
Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似
Linux 的字符串截取很有用。有八种方法。 假设有变量 var=http://www.aaa.com/123.htm 1. # 号截取,删除左边字符,保留右边字符。 echo ${var#*//} 其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符 即删除 http:// 结果是 :www.aaa.com/123.htm 2. ## 号截取,删除左边字符,保留右边字符。 echo ${var##*/} ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符 即删除 http://www.aaa.com/ 结果是 123.htm 3. %号截取,删除右边字符,保留左边字符 echo ${var%/*} %/* 表示从右边开始,删除第一个 / 号及右边的字符 结果是:http://www.aaa.com 4. %% 号截取,删除右边字符,保留左边字符 echo ${var%%/*} %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符 结果是:http: 5. 从左边第几个字符开始,及字符的个数 echo ${var:0:5} 其中的 0 表示左边第一个字符开始,5 表示字符的总个数。 结果是:http: 6. 从左边第几个字符开始,一直到结束。 echo ${var:7} 其中的 7 表示左边第8个字符开始,一直到结束。 结果是 :www.aaa.com/123.htm 7. 从右边第几个字符开始,及字符的个数 echo ${var:0-7:3} 其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。 结果是:123 8. 从右边第几个字符开始,一直到结束。 echo ${var:0-7} 表示从右边第七个字符开始,一直到结束。 结果是:123.htm 注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
Shell 注释
以"#"开头的行就是注释,会被解释器忽略。
sh里没有多行注释,只能每一行加一个#号
Shell 基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 ')
#!/bin/bash val=`expr 2 + 2`
echo "两数之和为 : $val"