shell脚本简介及常用文本编辑命令

什么是脚本?

脚本简单地说是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的,可以通过记事本打开和编辑

为什么要学习和使用shell

shell属于内置脚本

程序开发的效率非常高,依赖于功能强大的命令可以迅速的完成开发任务(批处理)

语法简单,代码写起来比较轻送,简单易学

shell简介

shell是一个C语言编写的脚本语言,它是用户与linux的桥梁,用户输入命令交给shell处理,shell将相应的操作传递给内核,内核把处理的结果输出给用户

Linux 基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。

shell分类

1:图形界面shell

GUI shell 是为Unix或者类Unix操作系统构建的一个功能完善操作简单以及界面友好的桌面环境。

2:命令行界面shell

CLI是在用户提示符下键入可执行指令的界面,用户通过键盘输入指令,完成一系列操作。

查看shell 

shell是一个程序,一般放在/bin或者/user/bin目录下,当前linux系统可用的shell都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用cat命令查看他。

在现在的linux上,sh已经被bash代替,/bin/sh往往是指向/bin/bash的符号链接

如果你希望查看当期那linux的默认shell,那么可以输出SHELL环境变量

$ echo $SHELL
/bin/bash

输出结果表明默认的shell是bash

SHELL是linux系统中的环境变量,他指明了使用的shell程序的位置,也就是使用的哪个脚本

第一个shell脚本

用vim打开test.sh

#!/bin/bash
echo "Hello world!"

第一行是指定解释器,第二行是打印Hello World!

写好后,有三种执行脚本的方法

方法一:直接用bash解释器执行

# bash test.sh
Hello world!

当前终端会新生成一个子 bash 去执行脚本。

方法二:添加可执行权限

# ll
test.sh -rw-r--r--. 1 root root 32 Aug 18 01:07 test.sh
 # chmod +x test.sh
 # ./test.sh
-bash: ./test.sh: Permission denied
# chmod +x test.sh
# ./test.sh
Hello world!

这种方式默认根据脚本第一行指定的解释器处理,如果没写以当前默认 Shell 解释器执行。

注意,这里在运行时一定要写成 ./test.sh(绝对路径亦可),而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,Linux 系统会去 PATH(环境变量) 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

方法三:source命令执行,以当前默认shell解释器执行

# source test.sh
Hello world!

三种方法的区别:

当shell脚本具有可执行权限时,用bash与绝对路径执行脚本是没区别的。绝对路径是因为当前目录没在PATH中,所以用"."是用来表示当前目录的

source这个命令其实只是简单地读取脚本里面的语句一次在当前的shell里面执行,没有建立行的子shell。那么脚本里面所有的新建、改变变量的语句都会保存在当前的shell里面

bash重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell

shell编程的几个常用命令

grep命令详解

过滤来自一个文件或者面准输入匹配模式的内容

除了grep外,还有egrep。egrep是grep的扩展,相当于grep -E

grep常用选项

    选项             
描述


-E,--extended-regexp


模式是扩展正则表达式(ERE)

 -i,--ignore-case
忽略大小写

 -n,--line-number
打印行号

 -o,--only-matching
只打印匹配的内容

 -c,--count
只打印每个文件匹配的行数

 -B,--before-context=NUM
打印匹配的前几行

 -A,--after-context=NUM
打印匹配的后几行


-C,--context=NUM


打印匹配的前后几行


--color[=WHEN],

 匹配的字体颜色

-v,--invert-match

 打印不匹配的行

cut命令

使用说明:

cut命令从文件的每一行剪切字节,字符和字段并将这些字节,字符和字段写至标准输出

如果不指定file参数,cut命令将读取标准输入

常用参数:

-c:以字符为单位进行分割

-d:自定义分隔符

-f:与-d一起使用,指定显示哪个区域

[[email protected] ~]# echo "this is ken" | cut -c  4
s
[[email protected] ~]# echo ‘this is ken‘ | cut -d‘ ‘ -f3
ken

sort命令

sort命令用于将文本内容加以排序

sort可针对文本文件的内容,以行为单位来排序

常用参数说明:

*  -n:依据数值的大小排序(默认是根据字符进行排序)

*  -r:以相反的顺序来排序

*  -u:去除重复的行(只要那个指定的字段重复,就认定是重复的行)

   -t:<分隔符号>指定排序时所用的栏位分割字符

   -k:根据切割后的那一段进行排序

uniq命令

作用:去除重复的行(相邻且相同,认定为重复)

选项:

  -c:在首行用数字表示该行出现了多少次

  -u:仅仅显示那些没有出现重复过的行

seq命令

作用:生成一个数组序列

[[email protected] ~]# seq 5       #终止位5
1
2
3
4
5
[[email protected] ~]# seq 2 5     #起始位2,终止位5
2
3
4
5
[[email protected] ~]# seq 2 2 10  #起始位2,步长为2,终止位10
2
4
6
8
10

tr命令

作用:突然命令用于转换或者删除文件中的字符

tr指令从标准输入设备读取数据,经过字符串转义后,将结果输出到标准输出设备

a-z  任意小写

A-Z  任意大写

0-9  任意数字

替换实例:

[[email protected] ~]# echo "this is ken" | tr a-z A-Z
THIS IS KEN
[[email protected] ~]# echo "THIS IS KEN" | tr A-Z a-z
this is ken

删除特定字符串实例:

[[email protected] ~]# cat test
6 this:is:ke3
2 this:is:ke4
2 this:is:ke4
2 this:is:ke4
2 this:is:ke4
5 this:is:ke2
6 this:is:ke1
1 this:is:ke6
8 this:is:ke7
[[email protected] ~]# cat test | tr -d ‘s‘
6 thi:i:ke3
2 thi:i:ke4
2 thi:i:ke4
2 thi:i:ke4
2 thi:i:ke4
5 thi:i:ke2
6 thi:i:ke1
1 thi:i:ke6
8 thi:i:ke7

原文地址:https://www.cnblogs.com/it-ljm1903/p/10867321.html

时间: 2024-10-07 06:33:07

shell脚本简介及常用文本编辑命令的相关文章

Linux Shell——bash shell 脚本简介

bash shell 脚本简介 shell 运行环境 如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash shell 的,所以你不需要额外配置所谓的开发环境. 我的 shell 环境是 macOS Sierra 版本,如果你用的是其他 Linux 系统,后面的例子基本上都是可以运行的. 首先,打开Terminal 命令行,先检查下你的系统的 shell 版本: echo $BASH_VERSION bas

Linux Shell脚本与Vim常用操作笔记

本篇笔记记录最最基本的vim和shell操作. ShellScript能干什么 Shellscript类似与Windows的批处理,可以把很多指令汇总到一起,于是可以很容易地通过一个操作执行多个命令.很轻量,有效率. 在Vim中编写 Vim/Vi编辑器很强大,功能非常多,快捷键.指令更多,只需要知道最常用的就够了. Vi有3种工作模式 1.命令模式 进去之后的默认模式就是命令模式.能接受命令,但是不明文显示. 2.输入模式 命令模式按下a键就进入输入模式(还能按i.o.s等等).按Esc返回命令

Linux Shell脚本入门--cut命令

Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [[email protected] ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [[email protected] ~]# cut -c 字符区间 <==用于排列整齐的信息 选项与参数: -d :后面接分隔字符.与 -f 一起使用: -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思: -c :以字符 (

解决方案:centos运行shell脚本时报“$&#39;\r&#39;: 未找到命令”

=============================================== 2018/9/12_第1次修改                       ccb_warlock =============================================== 问题: 将vs code里编写好的sh脚本(tmp.sh)上传到服务器(centos),运行时报"$'\r': 未找到命令". 解决方案: 查了资料后才知道,由于该脚本的命令在windows上编辑后

bash特性以及shell脚本简介

bash的特性之多命令执行的逻辑关系:1.命令替换COMMAND1 $(COMMAND2)2.管道COMMAND1 | COMMAND2 | COMMAND3 ...3.顺序执行结构COMMAND1 ; COMMAND2 ; COMMAND3 ...4.选择执行结构:如果...那么...要么...要么...逻辑运算:与:逻辑乘法,1--真,0--假,&&,双目操作符1 && 1 = 11 && 0 = 00 && 1 = 00 &&a

shell脚本编程-使用结构化命令(if/else)(转)

11.1 使用if-then语句 格式如下 if语句会执行if行定义的那个命令,如果该命令的退出状态码是0,则then部分的语句就会执行,其他值,则不会 1 2 3 4 if command then commands fi 在要执行的命令结尾加个分号,就能在同一行使用then语句了,格式如下 1 2 3 if command; then commands fi 11.2 if-then-else语句 格式如下: 1 2 3 4 5 6 if command then commands else

续写vim,shell脚本基础编辑,read命令,if与case判断语句,文件查找方式,压缩与解压,

一. Vim续写 ?1.命令扩展模式的位置定界 ??起始位置 cmd 终止位置???Cmd:????y复制????d删除????Gu变大写????gu变小写??例如:0y$命令意味着:????0 先到行头????Y 从这里开始拷贝????$ 拷贝到本行行尾最后一个字符????Ye 从当前位置拷贝到本单词的最后一个字符 ?2.扩展命令模式:地址定界 ? ?# 具体第#行,? ?#1,#2 从开头数第#1行到第#2行? ?#1,+#2 从开头数的第#1行到从第#1行开始数的第#2行? ? ?例:2,

Linux Shell脚本编写——使用结构化命令(四)

命令行参数 向shell脚本传数据的最基本方法是使用命令行参数,命令行参数允许在运行脚本时向命令行添加数据值 读取参数 bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数,甚至包括shell执行的程序的名字,$0是程序名,$1是第一个参数,$2是第二个参数 代码4-1 [email protected]:/data# cat demo1 #!/bin/bash factorial=1 for ((i=1;i<=$1;i++)) do factorial=$[ $fact

inux C程序中获取shell脚本输出(如获取system命令输出)

转载自 http://blog.csdn.net/hjxhjh/article/details/7909518 1. 前言 Unix 界有一句名言:"一行shell脚本胜过万行C程序",虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个 ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行