【shell入门】Shell用法
参考: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"
【shell入门】Shell用法的更多相关文章
- shell入门-shell特性
1.关于! 命令:!! 说明: 执行上一条命令 [root@wangshaojun ~]# pwd/root[root@wangshaojun ~]# !!pwd/root 命令:!n (n表示数字) ...
- 10_Linux基础-SHELL入门1
@ 目录 10_Linux基础-SHELL入门1 一. 输入输出重定向 二. 2个特殊文件 三. here document 四. tee命令 五. 清空文件内容 六. SHELL入门 SHELL的变 ...
- linux shell 入门
本文是本人学习linux shell入门收集整理,不完全原创. 参考博文: http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html ...
- 【shell】shell编程(一)-入门
如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux.说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的很简单.背景 什么是shell编程 ...
- Shell expr的用法 bc 命令 let命令
Shell expr的用法 bc 命令 let命令 数学运算 let命令 expr命令 bc命令 $(()) $[] http://www.80ops.cn/archives/245. ...
- hbase基本概念和hbase shell常用命令用法
1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...
- 【转载】HBase基本概念和hbase shell常用命令用法
1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...
- Linux shell入门基础(六)
六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...
- Linux shell入门基础(一)
Linux shell入门基础(一): 01.增加删除用户: #useradd byf userdel byf(主目录未删除) userdel -r byf 该用户的属性:usermod 用 ...
随机推荐
- Spring中的单例模式和多例模式的应用
在Spring的配置中,Bean的scope属性中存在两种模式:singleton(单例模式).prototype(多例模式) singleton 单例模式:对象在整个系统中只有一份,所有的请求都用一 ...
- 基于js原生封装的点击显示完整文字
基于js原生封装的点击显示完整文字 (function(window) { var inner = ''; var showCont_s = function(ele) { this.init.app ...
- mysql四:数据操作
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- vue.js 三(数据交互)isomorphic-fetch
至于fetch的介绍,在这里就不多说了,官方和网络上的说明不少 之前使用jquery的Ajax朋友,可以尝试一下使用一下这个新的api 推荐使用isomorphic-fetch,兼容Node.js和浏 ...
- 微信小程序第3课 目录结构及小知识点
目录 目录结构 安装包下载地址 一.pages目录介绍 二.index目录介绍 index.js(相当JavaScript文件,必不可少的) index.json(可以不需要) index.wxml( ...
- php实现的三个常用加密解密功能函数示例
目录 算法一: 算法二: 算法三(改进第一个加密之后的算法) 本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_ ...
- while循环中continue和break的区别
除了满足while条件外,还有两种方法可以终止循环,它们分别是break和continue.它们唯一的区别是break跳出整个循环,直接执行下面的代码了;而continue是终止当次循环,不执行下面的 ...
- 使用 CAST
使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, st ...
- 第三模块 面向对象& 网络编程基础 实战考核
1.简述构造方法和析构方法. 构造方法(__init__):主要作用是实例化时给实例一些初始化参数,或执行一些其它的初始化工作,总之因为这个__init__只要一实例化, 就会自动执行,不管你在这个方 ...
- 继承Thread类使用多线程
java实现多线程有两种方式,一种是继承Thread类,另外一种就是实现Runnable接口. 两种实现方法的优缺点: 使用Thread类实现多线程局限性就是不支持多继承,因为java是不支持类多继承 ...