博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux shell脚本基础知识
阅读量:5255 次
发布时间:2019-06-14

本文共 1856 字,大约阅读时间需要 6 分钟。

由于要用到所以学习下,并且记录下。


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 抓取验证码的小脚本,今后遇到了就会有目的的学习。

这个东西学深也很难,我就用这写个小脚本,今后遇到了会继续学习。

 

 

 

转载于:https://www.cnblogs.com/xiongge/p/3583113.html

你可能感兴趣的文章
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
C++循环单链表删除连续相邻重复值
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
ASP.NET使网页弹出窗口不再困难
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
windown快速安装xgboost
查看>>
Linux上安装Libssh2
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>