Shell脚本编写基础
linux操作系统任务十shell 编程基础
管道操作
Shell使用竖线(|)连接两个或者多个命令(程序或者进程), 把一个命令的输出作为下一个命令的输入,以这种方式连接的两 个或者多个命令就形成了管道(pipe) Linux 管道的具体语法格式如下:
command1 | command2[ | commandN... ]
管道操作
在Shell中变量的类型有多种,常用的有整数、字符串和数组 在Shell中可以使用方括号([ ])来执行数学表达式,如果需要将表 达式的值赋给变量则需要使用美元符号加方括号($[])。 VAR3= $[VAR1+VAR2]
认识shell脚本
Shell脚本的关键在于输入多个命令并处理每个命令的结果,有时候需 要将一个命令的结果传递给另外的命令。Shell可以将多个命令串起来 一次执行完成,如果将多个命令放在同一行,中间使用分号(;)隔开。
创建shell脚本
文件通常以.sh结尾 文件的开头必须是:#! /bash/shell Shell脚本在执行的时候需要使用绝对路径或相对路径,如果想直接通 过脚本名称执行可以将Shell脚本的路径添加到PATH环境变量。
语句可以使用if-then-else语句,其格式如下: if condition; then
command1 command2 ... commandN else command1 command2 ... fi
shell脚本系列---【如何创建shell脚本,并执行常用的命令】
shell脚本系列---【如何创建shell脚本,并执⾏常⽤的命令】脚本⼊门Demo1:创建sh脚本⽂件,vi Demo1.sh
#!/bin/bash
#this is my first shell
name=xiaoqiang
echo "hello world!"
echo "my name is $name"
#常见的系统变量
# $0 : 当前程序的名称
echo $0
# $n :当前程序的第n个参数例:./test.sh hujunwei zhangsan, $1 代表启动程序时的第⼀个参数:hujunwei
echo $1
# $* :当前程序的所有参数(不包括程序本⾝)
echo $*
# $# :当前程序的参数个数(不包括程序本⾝)
echo $#
# $? :上⼀⾏命令或程序执⾏完后的状态,⼀般返回 0 表⽰执⾏成功
echo $?
# $UID : 当前⽤户的 ID
echo $UID
# $PWD :当前所在的⽬录
echo $PWD
写好之后,如何运⾏脚本?
第⼀种⽅式:/bin/bash Demo1.sh
第⼆种⽅式:sh Demo1.sh
第三种⽅式:赋予执⾏权限:
chmod o+x Demo1.sh
然后./Demo1.sh 执⾏即可
执⾏结果:
Shell脚本编写如何进行日志分析和统计
Shell脚本编写如何进行日志分析和统计
在软件开发和系统管理过程中,日志文件是一项非常重要的资源,
它包含了系统运行期间的各种信息,如错误日志、运行日志、访问日
志等。对于开发人员和系统管理员来说,正确地分析和统计日志文件
是解决问题和优化系统性能的关键。本文将介绍如何使用Shell脚本编
写进行日志分析和统计的方法。
一、Shell脚本基础知识
1.1 创建Shell脚本文件
在开始编写Shell脚本之前,我们需要创建一个新的脚本文件。可
以使用文本编辑器,如vi或nano,创建一个以.sh结尾的文件,例如:log_analysis.sh。
1.2 声明Shell解释器
在Shell脚本的第一行,需要声明使用哪个Shell解释器来执行脚本。最常见的Shell解释器是bash,因此我们可以在脚本的第一行加入如下
声明:
#!/bin/bash
1.3 运行Shell脚本
当Shell脚本文件创建完成后,可以使用以下命令来运行脚本:
$ chmod +x log_analysis.sh
$ ./log_analysis.sh
二、日志文件的读取与分析
2.1 按行读取日志文件
首先,我们需要从指定的日志文件中读取内容。可以使用Shell中的read命令对文件进行逐行读取,例如:
while read line
do
# 进行相关操作
done < logfile.log
2.2 过滤和提取关键信息
在读取日志文件的每一行之后,我们可以使用grep工具对行进行过滤,提取我们需要的关键信息。例如,我们可以通过以下方式提取出所有的错误日志:
linux+shell脚本语言基础知识
linux+shell脚本语言基础知识
linuxshell脚本语言基础知识
一.shell简介
linux系统的shell做为操作系统的外壳,为用户提供更多采用操作系统的界
面,更确切的说,shell是用户与linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用shell脚本编程,完成更加复杂的操作。
shell就是一个命令解释器,它从输出设备加载命令,再将其变为计算机可以
以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。
linux的shell种类众多,常用的存有:bourneshell(/usr/bin/sh或/bin/sh)、bourneagainshell(/bin/bash)、cshell(/usr/bin/csh)、kshell
(/usr/bin/ksh)、shellforroot(/sbin/sh),等等。不同的shell语言的语法有所不同,所以不能交换使用。每种shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用bash,也就是bourneagainshell进行编程。
二.shell采用
1.建立和运行shell程序
shell脚本程序:按照一定的语法结构把若干linux命令非政府在一起,就是这
些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限)
像是撰写高级语言的程序一样,撰写shell程序须要一个文本编辑器,如vi和vim,通常采用vim文本编辑器,积极支持更便捷的填入模式。首先采用vim编辑器编辑一个hello.sh文件:
Shell脚本编写的十个高级技巧
Shell脚本编写的十个高级技巧Shell脚本编写是系统管理和自动化任务中一个非常重要的技能。掌握一些高级技巧可以帮助我们更高效地编写脚本,提高工作效率。本
文将介绍Shell脚本编写的十个高级技巧,帮助读者更好地理解和应用Shell脚本。
一、函数的使用
函数是Shell脚本中将一系列命令组织起来以实现特定功能的有效
方法。通过函数,我们可以将脚本划分为更小的部分,使得代码更加
清晰和易于维护。同时,函数还可以接收参数,增加了脚本的灵活性。以下是一个示例:
```shell
#!/bin/bash
my_function() {
echo "Hello, $1!"
}
my_function "World"
```
二、条件判断和循环
条件判断和循环是编写脚本时常用的结构。在Shell脚本中,我们可以使用if-else语句进行条件判断,使用for和while循环进行迭代操作。以下是一个示例:
```shell
#!/bin/bash
if [ $1 -gt 10 ]; then
echo "Greater than 10"
else
echo "Less than 10"
fi
for i in {1..5}; do
echo "Number: $i"
done
counter=0
while [ $counter -lt 5 ]; do
echo "Counter: $counter"
((counter++))
done
```
三、数组的使用
Shell脚本中的数组可以用于存储一组相关的数据。通过使用数组,我们可以更方便地进行数据操作和处理,减少重复代码的编写。以下是一个示例:
shell编程总结
shell编程总结
Shell编程是一种基于命令行的脚本编程语言,常用于Linux和Unix系统中。本文将对Shell编程进行总结,包括以下内容:
1. Shell的基础知识:介绍Shell的定义、历史、发展以及Shell 与Linux的关系。
2. Shell脚本的格式:讲解Shell脚本的格式,包括文件头、变量、注释、命令等。
3. Shell命令:介绍常用的Shell命令,如ls、cd、cp、mv、rm、mkdir、cat等。
4. Shell的流程控制:讲解Shell脚本的流程控制语句,包括if语句、for循环、while循环、case语句等。
5. Shell函数:介绍Shell函数的定义、调用和传参等。
6. Shell的文本处理:讲解Shell脚本中的文本处理命令,如grep、sed、awk等。
7. Shell的正则表达式:介绍正则表达式的定义、语法和常用操作符等。
8. Shell的调试和错误处理:讲解Shell脚本的调试方法和错误处理语句,如set -x、set -e等。
9. Shell脚本的实战:通过实际案例介绍如何使用Shell脚本进行系统管理、日志分析、数据处理等。
通过本文的总结,读者可全面了解Shell编程的基础知识和常用技巧,提高Shell编程的能力。
Shell脚本编写规范
Shell脚本编写规范
Shell脚本编程已经成为了现今开发人员的必备技能之一。在实际工作中,写出高效、可维护、可扩展的Shell脚本对于提高开发效率和减少维护成本都有着重要的作用。然而,由于Shell脚本本身的语法限制和松散性,很容易写出散乱、难以维护的代码。因此,规范的Shell脚本编写方式显得尤为重要。本文将会从代码布局、函数定义、注释等方面介绍Shell脚本编写的规范方法。
一、代码布局
代码布局是Shell脚本编写中很重要的一部分,它可以使得代码看上去更整洁、清晰。以下是一个简单的代码布局示例:
```
#!/bin/bash
# 定义变量
var1="hello"
var2="world"
# 函数定义
fun1() {
# 函数体
}
# 主代码逻辑
if [ 条件 ]; then
# 逻辑代码
fi
```
* shebang:在脚本第一行添加“#!interpreter”,其中‘interpreter’为所使用的Shell解释器。例如“#!/bin/bash”表示使用bash作为解释器。
* 注释:对代码进行充分的注释,可以使得他人更快速地理解代码的用途和思路,便于维护。
* 变量定义尽量靠近使用位置,可以降低代码阅读难度和提高可维护性。
* 函数定义部分可以放在主代码逻辑之前或之后,要注意函数定义要清晰易懂。
二、函数定义
函数是Shell脚本中非常重要的一部分,需要有规范的定义方式和作用范围。以下是一个简单的函数定义示例:
```
# 函数名:check_file_exists
# 功能:检查文件是否存在
# 参数1:文件路径
PowerShell脚本编程实用指南
PowerShell脚本编程实用指南PowerShell是由Microsoft开发的一种跨平台的任务自动化和配置管理框架。通过使用PowerShell脚本编程,可以简化和自动化各种常见任务,提高工作效率。本指南将介绍PowerShell脚本编程的基础知识和实用技巧,帮助读者快速入门和运用PowerShell脚本编写出高效可靠的代码。
一、PowerShell简介及环境搭建
1.1 PowerShell的定义和特点
PowerShell是一种任务自动化和配置管理框架,具有强大的命令行环境和脚本编程能力。它采用了对象导向的编程范式,使得脚本编写更加简洁高效。
1.2 PowerShell的安装和配置
在本节中,将详细介绍如何下载、安装和配置PowerShell的开发环境。通过按照指导进行环境搭建,读者可以轻松开始PowerShell脚本编程之旅。
二、PowerShell脚本语言基础
2.1 PowerShell基本语法
PowerShell脚本使用类似于C#和的语法,具有丰富的控制结构和数据类型。本节将介绍PowerShell脚本的语法规则和基本操作符。
2.2 变量和数据类型
了解如何声明和使用变量以及PowerShell支持的各种数据类型,对于编写灵活和可靠的脚本至关重要。本节将探讨PowerShell中常用的数据类型和变量操作。
2.3 流程控制
PowerShell脚本通过条件判断、循环和跳转语句来实现流程控制。在本节中,将介绍各种流程控制结构的语法和用法,并提供一些实例演示。
三、PowerShell脚本编程实践
详解shell脚本的编写规范
详解shell脚本的编写规范
⽬录
编写shell脚本的⼀些规范
解释器
添加脚本版本和注释功能
添加脚本调试
变量命名
命名规范
函数命名
脚本命名
函数
引⽤模块或⽂件
脚本⽇志
配置⽂件
编写shell脚本的⼀些规范
解释器
shell脚本⼀般选择bash作为解释器,脚本开头应为
#!/bin/bash
或
#!/bin/sh
添加脚本版本和注释功能
在脚本的开头加注释,说明脚本作者、编写时间、脚本功能,最好可以加上脚本的版本号。shell中脚本注释⽤#,注释语句和#号之间有⼀个空格
#!/bin/bash
# 脚本版本
# 脚本作者
# 脚本时间
# 脚本功能
添加脚本调试
通过set命令添加脚本调试,如果报错,脚本直接退出,不继续执⾏,对于管道错误也可以直接退出
#!/bin/bash
# 脚本版本
# 脚本作者
# 脚本时间
# 脚本功能
set -e
set -o pipfail
变量命名
变量命名要统⼀规范,shell变量建议使⽤全部⼤写,意思清晰明了,如果是多个字符,可以采⽤下划线进⾏切割,
如APACHE_LOG_PATH,对于变量的引⽤可以直接使⽤$,如果有下划线分区的变量,建议使⽤${APACHE_LOG_PATH}。
全局变量和局部变量
全局变量可以采⽤前⾯时候的定义⽅式,如果是函数中的局部变量,建议使⽤local进⾏变量声明。这个防⽌全局变量和局部变量混淆,局部变量可以采⽤⼩写,⽤来区分局部变量和全局变量。
function TestFunc(){
local name='xiaolangjun'
echo ${name}
}
如果存在变量合并的情况,⽐如⽬录和⽂件名合并,这样可以重新赋值成⼀个新的变量,这样⽅便以后调⽤。
shell脚本教程详细讲解(共80张PPT)
目录? 7. 移动到第一行,并且向下搜寻一下“bzip2”这个字符串,请问他在
第几行?
8. 接着下来,我要将 50 到 100 行之间的 man 改为 MAN,并且一个一
个挑选是否需要修改,如何下达指令?
u:恢复刚才被修改的文本 U:恢复光标所在行的所有修改
.:重复上一次命令的操作
11
命令模式下的操作:文本复制、粘贴
复制命令:y yy: 复制整行 yw:复制光标所在的单词 nyw:复制包括光标所在的n个单词 nyy:复制包括当前行在内的n行
粘贴命令
P
光标移动
h、j、k、l nG:移动到底n行行首
vi –R file_name,以只读方式打开文件
8
3、VI的退出
冒号进命令行模式下:
:q! 不存档强制退出。
:w 保存但不退出,w(rite)后可加所要存档的文档 名。
:wq 存档后退出。
命令模式下按zz,功能与 :wq 相同。
:x 与:wq相同
命令模式:
ZZ、ZQ
保存/不保存退出
9
4、怎么编辑
14
三种模式间的转换关系
文本输入状态
按ESC键
按 A,I,S,C,O 等命令
shell脚本基础(又长又详细)
shell脚本基础(⼜长⼜详细)
第⼗⼀章 BASH脚本(⼀)
常见的Shell变量的类型包括环境变量、预定义变量、位置变量、⽤户⾃定义变量。本节将分别学习这四种Shell变量的使⽤。
11. 1、 Shell的环境变量
通过set命令可以查看系统中所有Shell变量(包括环境变量和⽤户⾃定义变量),由于内容输出较多,建议使⽤less命令分页查看。
常⽤环境变量:
PATH 决定了shell将到哪些⽬录中寻找命令或程序
HOME 当前⽤户主⽬录
HISTSIZE 历史记录数
LOGNAME 当前⽤户的登录名
USER 当前⽤户名
UID 当前⽤名的UID
HOSTNAME 指主机的名称
SHELL 前⽤户Shell类型
LANGUGE 语⾔相关的环境变量,多语⾔可以修改此环境变量
MAIL 当前⽤户的邮件存放⽬录
PS1 基本提⽰符,对于root⽤户是#,对于普通⽤户是$
PS2 附属提⽰符,默认是“>”
例:以分号分隔,显⽰当前的⽤户的⽤户名、宿主⽬录、登录Shell。
例:查看当前命令的搜索路径,并将/opt/bin⽬录添加到现有搜索路径中去,从⽽可以直接执⾏此⽬录中的命令。
环境变量的配置⽂件
⽤户可在当前的Shell环境中直接为环境变量赋值,但需要长期变更所使⽤的某个环境变量时,可以修改配置⽂件。
在Linux系统中,⽤户环境变量的设置⼯作习惯上在 /etc/profile ⽂件及宿主⽬录中 .bash_profile⽂件中进⾏,前者称为全局配置⽂件(对所有⽤户起作⽤),后者称为⽤户配置⽂件(允许覆盖全局配置)。
shell编程基础知识汇总
shell编程基础知识汇总
Shell编程是一种在操作系统中通过命令行进行脚本编程的方式。它
是一种相对简单的编程语言,很容易学习和使用,并且在Unix和类Unix
操作系统上广泛应用。在本文中,我将为您汇总一些基础的Shell编程知识。
1. Shell脚本的基本结构:Shell脚本由一系列命令和控制结构组成。它们被写在一个文本文件中,文件的第一行以“#!”开头,后面是解释器
的路径。脚本的主体部分包含了一系列的命令,可以通过换行符或分号将
它们分隔开。
2. 变量:Shell脚本中可以定义和使用变量。变量可以用来存储值,并在脚本中通过变量名进行引用。在Shell中变量是大小写敏感的。变量
赋值可以直接使用“=”,但在使用变量时需要使用$符号。
例如:
```
name="John"
echo "My name is $name"
```
3. 输入输出:Shell脚本可以通过读取标准输入和向标准输出打印
信息来与用户进行交互。标准输入通常通过键盘输入,标准输出通常在终
端上显示。
例如:
echo "Enter your name:"
read name
echo "Hello, $name"
```
4. 命令行参数:Shell脚本可以从命令行接收参数,并在脚本中使用这些参数。命令行参数可以通过特殊变量$1,$2等来引用,其中$1表示第一个参数,$2表示第二个参数,以此类推。
例如:
```
echo "Hello, $1"
```
运行脚本并传入参数:
```
./script.sh World
```
输出:
```
Hello, World
Shell脚本编写如何进行系统初始化和配置
Shell脚本编写如何进行系统初始化和配置在进行系统初始化和配置时,Shell脚本是一种非常有效的工具。通过编写Shell脚本,我们可以自动化执行一系列的操作,使系统的初始化和配置过程变得更加高效和可靠。下面,我们将介绍一些常用的Shell脚本编写技巧和方法,帮助你进行系统初始化和配置。
一、Shell脚本的基本结构
一个典型的Shell脚本通常包含以下几个部分:
1. 声明脚本类型:在脚本的第一行,使用shebang注释指定脚本所使用的Shell解释器。例如,#!/bin/bash 表示该脚本将使用Bash作为解释器。
2. 导入外部依赖:如果脚本需要使用到外部命令或其他依赖项,可以通过使用source或者类似的命令来导入它们。
3. 定义变量:为了方便脚本的维护和重用,可以使用变量来存储一些参数和配置信息。
4. 编写函数:将一些逻辑相近的代码块封装成函数,可以提高脚本的可读性和可维护性。
5. 主要逻辑:编写脚本的主要逻辑代码,包括系统初始化和配置的具体操作。
6. 执行脚本:在脚本的最后,可以通过调用主函数或者其他方式来执行脚本的逻辑。
二、系统初始化
系统初始化是在系统启动或重新启动之后,对系统进行一系列预定义的配置和操作,以适应特定的需求。下面是一个简单的Shell脚本示例,用于进行系统初始化的操作:
```
#!/bin/bash
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 更新系统软件
sudo yum update -y
五个简单的shell脚本
五个简单的shell脚本
1、编写shell脚本 ex1.sh,提⽰⽤户输⼊⽤户名,并判断此⽤户名是否存在。
(提⽰:利⽤read、grep和/etc/passwd)
#!/bin/bash
echo "请输⼊⽤户名"
read username #相当于scanf
if grep $username /etc/passwd; then #if的结尾要有fi
echo "存在"
else
echo "不存在"
fi
2、编写shell脚本 ex2.sh,能将命令⾏参数相加并输出,如: ex2 1 3 8输出结果为12。
(提⽰:利⽤$@和循环结构)
#①可以把命令⾏的任意个数字相加
#!/bin/bash
sum=0 #赋初值
for var in $@ #命令⾏的所有值⽤以循环
do sum=$[$sum+$var] #$相当于地址符
done
echo "$sum"
#②可以把命令⾏三个数相加
#!/bin/bash
CITY=SUM;
let SUM=$1+$2+$3
echo "$SUM"
3、编写shell脚本 ex3.sh,能将命令⾏参数所代表的⽂件统计⾏数,相加并输出结果,如: ex3 file1 file2 file3 ,统计三个⽂件的⾏数的总数。
(提⽰:利⽤$@和循环结构)
#!/bin/bash
sum=0
nub=0
for var in"$@"
do
nub=$(sed -n '$=' $var) #读取⽂件中数据的⾏数
sum=$[$sum+$nub]
done
echo "$sum"
4、编写shell脚本 ex4.sh,将当前⽬录下的.c⽂件移到命令⾏参数指定的⽬录下,并按⽂件⼤⼩排序,显⽰移动后指定⽬录的内容。
Shell脚本编写的高级技巧使用正则表达式和模式匹配进行文件名处理
Shell脚本编写的高级技巧使用正则表达式和模式匹配进行文件名处理
Shell脚本编写的高级技巧:使用正则表达式和模式匹配进行文件名处理
在Shell脚本编写中,使用正则表达式和模式匹配可以方便地进行文件名处理。正则表达式是一种强大的字符匹配工具,通过使用特定的语法规则,可以实现对字符串的灵活匹配。
一、正则表达式基础
1. 字符类:用方括号 [] 来定义
示例:[abc] 匹配字符 a、b 或 c
2. 范围类:用连字符 - 表示字符范围
示例:[a-z] 匹配任意小写字母
3. 反义字符类:使用脱字符 ^
示例:[^0-9] 匹配除数字以外的所有字符
4. 重复次数:
a. * 表示任意次(包括0次)
b. + 表示至少一次
c. ? 表示0次或1次
d. {n} 表示恰好 n 次
e. {n,} 表示至少 n 次
f. {n,m} 表示 n 到 m 次
5. 特殊字符转义:
特殊字符如 .、*、+ 等需要使用反斜杠进行转义
二、使用正则表达式进行文件名匹配
1. 判断文件名是否匹配
例如,我们想要匹配所有以 .txt 结尾的文件名,可以使用以下Shell脚本代码:
```shell
# 定义要匹配的文件名模式
pattern=".*\.txt$"
# 遍历当前目录下的所有文件
for file in *
do
# 利用正则表达式进行匹配
if [[ $file =~ $pattern ]]; then
echo "匹配到文件:$file"
fi
done
```
2. 提取文件名中的信息
假设我们需要提取一个文件名的数字部分,并进行一些处理,可以使用以下Shell脚本代码:
Linux系统定时任务脚本使用Shell脚本实现对Linux系统的定时任务调度和执行
Linux系统定时任务脚本使用Shell脚本实现对Linux系统的定时任务调度和执行
在Linux系统中,我们经常需要执行定时任务来完成一些自动化的工作,例如定期备份数据、定时清理临时文件等。而在Linux系统中,我们可以使用Shell脚本来实现对定时任务的灵活控制和调度。本文将介绍如何使用Shell脚本在Linux系统中实现定时任务的调度和执行。
一、Shell脚本基础
在开始介绍定时任务的使用之前,我们首先需要了解一些Shell脚本的基础知识。Shell脚本是一种以Shell(命令行解释器)为解释器的脚本语言,用于批处理任务和自动化操作。在Linux系统中,我们可以使用各种Shell脚本编写工具,例如Bash、Sh、Csh等。
Shell脚本主要由命令、变量、条件判断、循环等组成。我们可以使用Shell脚本来执行各种操作,例如创建文件、修改文件权限、运行程序等。而对于定时任务,我们可以使用Shell脚本来编写一段特定的代码,然后在指定的时间点进行执行。
二、定时任务的调度
在Linux系统中,我们可以通过使用crontab命令来实现定时任务的调度。crontab是一个用于设置定时任务的命令,它可以让我们方便地进行任务的调度和执行。
1. 编写定时任务脚本
首先,我们需要编写一个定时任务脚本。这个脚本可以包含我们想要执行的一系列任务,例如备份数据、清理临时文件等。
下面是一个简单的定时任务脚本示例:
```shell
#!/bin/bash
# 备份数据
cp /data/*.txt /backup
# 清理临时文件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。
一、什么是shell
当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shel l(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。
当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的所做的一样,所不同的是,在DOS中,只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。
二、几种流行的shell
目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型:
#echo $SHELL
$SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令:
#shell-name
来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令:
$exit
可以退出这个子shell。
使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍:
1.ash
ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。
2.bash
bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色:
(1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。
(2)自动通过查找匹配的方式给出以某字符串开头的命令。
(3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。
3.ksh
ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。
4.csh
csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tc sh。
5.zch
zch是Linux最大的shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的shell的。
3. shell程序设计(基础部分)
其实作为命令语言交互式地解释和执行用户输入的命令只是shell功能的一个方面,shell 还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的程序控制结构。使用shell编程类似于DOS中的批处理文件,称为shell script,又叫shell程序或shell命令文件。
1.shell基本语法
shell的基本语法主要就是如何输入命令运行程序以及如何在程序之间通过shell的一些参数提供便利手段来进行通讯。
(1)输入输出重定向
在Linux中,每一个进程都有三个特殊的文件描述指针:标准输入(standard input,文件描述指针为0)、标准输出(standard output,文件描述指针为1)、标准错误输出(standar d error,文件描述指针为2)。这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell中,使用者可以利用“>”和“<”来进行输入输出重定向。如:
command>file:将命令的输出结果重定向到一个文件。
command>&file:将命令的标准错误输出一起重定向到一个文件。
command>>file:将标准输出的结果追加到文件中。
command>>&file:将标准输出和标准错误输出的结构都追加到文件中。
command
(2)管道pipe
pipe同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下:
command1| command2[| command3...]
也可以连同标准错误输出一起送入管道:
command1| &command2[|& command3...]
(3)前台和后台
在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下:
command
产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。
command &
产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。
2。shell程序的变量和参数
像高级程序设计语言一样,shell也提供说明和使用变量的功能。对shell来讲,所有变量的取值都是一个字符串,shell程序采用$var的形式来引用名为var的变量的值。
Shell有以下几种基本类型的变量:
(1)shell定义的环境变量