由于要用到所以学习下,并且记录下。
shell和shell脚本的概念
shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson的sh是第一种Unix Shell,Windows Explorer是一个典型的图形界面Shell。
shell脚本(shell script),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script是两个不同的概念。由于习惯的原因,简洁起见,本文出现的“shell编程”都是指shell脚本编程,不是指开发shell自身(如Windows Explorer扩展开发)
脚本解释器
sh
即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh,由Bell Labs开发。
2.几个基本概念(这几个是我经常见但是不太懂的东西,记录下)
1)管道符|,和grep
管道符”|”,就是把前面的命令运行的结果丢给后面的命令。grep :过滤一个或多个字符。
举例:
由图可以看出,过滤的单位为行,首先cat hello 结果为一个字符串,假设为str,然后执行str grep hello。
2)作业控制。
当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)
3)输入输出从定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>,
【变量】
变量:用一个字符或者字符串代表一组有意义的数据或者设定。(对下面的PATH 来说是路径设定)
变量分为系统预设的环境变量,和用户自定义的环境变量。系统预设的环境变量一般都是大写。
PATH:这个path里面包含了命令可执行文件的全部绝对路径,这样用户输入命令就不用输入路径名。(风多系统变量请输入env)
用echo 打印出此变量的内容如下。
3.shell编程
<1>基本格式:
利用vim等文本编辑器编写Shell脚本的格式是固定的,如下:
#!/bin/sh
#comments
Your commands go here
(1)第一行#! 告诉系统解释此脚本的shell程序所在路径。
(2)以#开始的一行内,全都是注释。
(3)如果一行程序没写完,则加上‘,’告诉系统本行程序没完,这行程序就会和下行程序合并为一行。
<2>我们从最简单的hello wrold说起。
这是我编写的hello world 代码。
遇到的问题:
(1)可以从上面的截图中看到变量a,怎么会是这样?不用声明定义吗?
(2)我第一次在程序中是 a = “hello world”,这种语言通用格式却报错?
回答(1):
变量不用声明,变量使用的格式为:variable_name = variable_value。
回答(2):变量赋值的时候中间不能有空格键。
注意:
不能echo “hello , $aworld”(因为 shell程序将不能分清$a,$aworld)正确的方法为echo "Hello ,${a}world"
<2>基本语法
字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了,哈哈),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
str='this is a string'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号
your_name='qinjx'str="Hello, I know your are \"$your_name\"! \n"
- 双引号里可以有变量
- 双引号里可以出现转义字符
今天写这么多只是为了扫个盲和写一个用wget 抓取验证码的小脚本,今后遇到了就会有目的的学习。
这个东西学深也很难,我就用这写个小脚本,今后遇到了会继续学习。