Shell脚本基础
linux操作系统任务十shell 编程基础

不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" 不被引号包围的字符串 "包围的字符串一样。字符串中不能出现空格,否则空格后边的字符
串会作为其他变量或者命令解析。
管道操作
Shell数组中可以存放多个值。Bash Shell 只支持一维数组,初始化时不 需要定义数组大小。在 Shell 中用括号( )来表示数组,数组元素之间用空 格来分隔。定义数组的一般形式如下: Array_name=(ele1 ele2 ele3... eleN)
创建shell脚本
可以在Shell脚本中创建用户自定义变量,用户变量可以存储临时数据 并在整个脚本中使用,类似于程序语言中的变量。变量命名规则如下 :
1.任意字母数字或下划线,长度不超过20个,不能以数字开头; 2.用户变量区分大小写; 3.使用=赋值,变量、=、值之间不能有空格;
创建shell脚本
引用变量的时候一定要在前面加 $,对变量赋值的时候,被赋值的变量不需要 加 $。 有时候用户需存储某个命令的输出信息,可以把命令的输出赋值给变量,赋值 规则有两种: 1.`命令` ,`是反引号,不是引号。 2.$(命令)
例: LS=`ls` echo $LS echo "===================================" LSL=$(ls -l) echo $LSL
$a -ne $b
检测左边的数是否大于右边的,如果是返回 true。 $a -gt $b
检测左边的数是否小于右边的,如果是返回 true。 $a -lt $b
检测左边的数是否大于等于右边的,如果是返回 true。
检测左边的数是否小于等于右边的,如果是返回 true。
$a -ge $b [ $a -le $b ]
Shell脚本编写基础

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等。
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文件:#!/bin/bash#helloworldexampleecho\这样,一个最简单的shell程序就撰写完了。
第一行:#!说明hello.sh这个文件的类型的,这有点类似于windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同。
1SHELL基础知识

SHELL一.什么是Shell脚本?怎样写一个简单的Shell脚本?shell 脚本是命令行命令简单的组合到一个文件里面。
Shell基本上是一个命令解释器。
以上面的程序为例利用vi编辑器编辑脚本,将脚本命名为 date.sh.Shell脚本不是复杂的程序,它是按行解释的,脚本第一行总是以#!/bin/sh 开头,它通知系统以下的Shell程序使用系统上的Bash来解释。
编写完后给脚本添加执行权限: chmod +x date.sh.运行脚本:date.sh.二.Shell中的一些变量变量一般都用大写字母表示使用 echo命令可以显示单个变量的取值,要在变量名前面加$如:USER=“haison”echo $USER如果设置变量时,不想再改变其值,可以将其设置为只读,只要在变量名前加readonly使用set命令可以显示所有本地定义的shell变量.使用unset 变量名可以清除对变量的定义.位置变量:$0(脚本名),$1-$9:脚本参数。
待定变量:$# 传递到脚本的参数个数.$* 传递到脚本的参数,与位置变量不同,此选项参数可超过9个.$$ 脚本的当前进程号.$! 后台最后运行的进程号.$@ 与$#相同,使用时加引号,并在引号中返回参数个数.$- 上一个命令的最后一个参数.$? 最后命令的退出状态,0表示没有错误,其他任何值表明有错误.例子:给文件var.sh加执行权限:执行:三.条件判断1.文件状态测试-d目录 -r可读-f常规文件 -w可写-L符号连接 -x可执行-s文件长度大于0,非空 -u文件有suid位设置例子:[ -f var.sh ] 0表示成功,其它为失败,其它的一样.2.逻辑操作符-a 逻辑与,操作符两边全为真,结果为真,否则为假-o 逻辑或,操作符两边一边为真,结果为真,否则为假.! 逻辑否,条件为假,结果为真,反之.例子:[ -r var.sh –a –w hello.c ]三.字符串测试= 两个字符串相等 != 两个字符串不相等-z 空串 -n 非空串例子:[ -z $SHELL]四.数值判断-eq 数值相等–lt第一个数小于第二个数-ne 数值不相等–le第一个数小于等于第二个数-gt 第一个数大于第二个数–ge第一个数大于等于第二个数例子:[ “10”–eq “12”]四.控制结构控制结构分为选择结构:if语句, cast语句循环结构:for语句,until语句,while语句if格式:If条件Then命令Else命令fiCase条件:Case 值 in模式)命令1;;*)命令2;;Esac取值后面必须为单词in,每一个模式必须以右括号结束。
Linux_基础教程--Shell脚本编程

学习各种管理和监视命令的使用
学习各种文本文件工具的使用
2014年12月24日
变量和表达式
2014年12月24日
18
Shell 变量操作
变量替换扩展
输入
变量测试 变量的字符串操作 变量的间接引用 $[expression] $((expression)) expr let declare -i
Shell 脚本的执行
PATH 环境变量的默认值不包含当前目录, 若脚本文件在当前目录,应使用 ./script-file
PATH 环境变量的默认值包含 ~/bin 目录, 用户可以将自己的脚本文件存放在 ~/bin 目录, 之后即可直接调用脚本文件名执行脚本了
2014年12月24日
7
Shell 脚本的编码规范
${var/%old/new}
用new替换${var}中结尾部分与old匹配的部分
注: (1)old 中可以使用 通配符。 (2)var 可以是 @ 或 *,表示对每个位置参数进行替换
sh –n 脚本名
对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。
2014年12月24日
12
脚本调试举例 1
对脚本进行语法检查
$ bash -n greetings.sh
显示脚本中每个原始命令行及其执行结果
$ bash -v greetings.sh
2014年12月24日 22
字符串变量替换扩展举例1
str='I love linux. I love UNIX too.‟
Linux之19——Shell编程基础详解

Linux之19——Shell编程基础详解第⼀部分:Linux Shell 简介Shell 是⼀个⽤ C 语⾔编写的程序,它是⽤户使⽤ Linux 的桥梁。
Shell 既是⼀种命令语⾔,⼜是⼀种程序设计语⾔。
Shell 是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户通过这个界⾯访问操作系统内核的服务。
Ken Thompson 的 sh 是第⼀种 Unix Shell,Windows Explorer 是⼀个典型的图形界⾯ Shell。
当⼀个⽤户登陆linux 系统后,系统就会为该⽤户创建⼀个shell程序。
Shell的版本:Bourne Shell:是贝尔实验室开发的,unix普遍使⽤的shell,在编程⽅⾯⽐较优秀,但在⽤户交互⽅⾯没有其他shell优秀。
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,在bourne shell基础上增强了很多特性,如命令补全,命令历史表等等Korn Shell:是对Bourne Shell 的发展,在⼤部分内容上与Bourne Shell兼容,集成了C Shell和Bourne shell优点。
C Shell:是SUN公司Shell的BSD版本,语法与c语⾔相似,⽐bourne shell 更适合编程第⼆部分 shell 程序设计基础2.1 shell输⼊输出2.1.1 echoecho命令可以显⽰⽂本⾏或变量取值,或者把字符串输⼊到⽂件中格式: echo stringecho的常⽤功能:\c 不换⾏ \f 不进纸 \t 跳格 \n 换⾏note:对于linux系统,必须使⽤-e选项来使以上转义符⽣效例:$ echo -e "hello\tboy"hello boyecho命令对特殊字符敏感,如果要输出特殊字符,需要⽤\屏蔽其特殊含义。
常⽤的特殊字符:双引号"" 反引号`` 反斜线\例:$ echo "\"\"" //想输出""""2.1.2 readread命令从键盘或者⽂件的某⼀⾏⽂本中读⼊信息,并将其赋给⼀个变量。
Linux13:shell脚本基本命令

Linux13:shell脚本基本命令shell脚本基本命令输出命令echo输出命令echo,基本模式就是echo [选项] [输出内容]输出内容如果包含空格,则必须将内容⽤双引号括起来。
选项-e可以使输出语句⽀持反斜线转义。
加⼊退格后就不会显⽰退格符左边的⼀个字符。
ascii码表中有对应的⼋进制和⼗六进制表⽰法,所以可以表⽰对应的字符。
显⽰环境变量的值:echo ${PATH}或echo $PATH,如果⼀个变量没有被设定,那么就什么都不返回。
颜⾊输出如将abcd⽤红⾊打印:echo -e "\e[1;31m abcd \e[0m"其中\e[1的意思是开启颜⾊输出,⽽\e[0m是结束颜⾊输出,31m代表红⾊,abcd是输出内容,其他颜⾊如下:第⼀个脚本与脚本执⾏⽅式新建⼀个脚本hello.sh:#!/bin/bash#the first programecho "hello world"exit 0其中第⼀⾏是声明,不是注释,不能省略,这是在指定使⽤哪个shell,如果没有这⾏有的程序可能⽆法执⾏。
第⼆⾏#开头的是注释,第四⾏是命令。
最后⼀⾏在设置回传值,在执⾏完该脚本后,执⾏echo $?就能查看这个值,可以通过这个⾃定义错误信息。
在脚本中有需要时要重新定义⼀下PATH环境变量,以便直接使⽤⼀些外部命令⽽不是写绝对路径:PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/module/jdk1.8.0_144/bin:/opt/module/hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/root/bin export PATH执⾏shell脚本要先赋予其可rx权限:chomd 755 hello.sh然后再执⾏./hello.sh这⾥也可以⽤绝对路径执⾏。
Shell脚本-从入门到精通

ex4if.sh,chkperm.sh,chkperm2.sh, name_grep,tellme,tellme2,idcheck.sh
第22页,共74页。
ex4if.sh
#!/bin/bash # scriptname: ex4if.sh
# echo -n "Please input x,y: "
echo echo –e "Hello $LOGNAME, \c"
echo "it's nice talking to you." echo "Your present working directory is:" pwd # Show the name of present directory
echo
then
# 那么
commands1 # 执行语句块 commands1
elif expr2 # 若expr1 不真,而expr2 为真
then
# 那么
commands2 # 执行语句块 commands2
... ...
# 可以有多个 elif 语句
else
# else 最多只能有一个
commands4 # 执行语句块 commands4
\t 插入tab; \v 与\f相同; \\ 插入\字符; \nnn 插入nnn(八进制)所代表的ASCII字符; --help 显示帮助
--version 显示版本信息
第8页,共74页。
Shell 脚本举例
#!/bin/bash
# This script is to test the usage of read # Scriptname: ex4read.sh echo "=== examples for testing read ===" echo -e "What is your name? \c" read name echo "Hello $name" echo echo -n "Where do you work? "
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
Shell图示 Shell图示
3
概述
Shell脚本 Shell脚本 如果你有一系列经常使用的Linux命令, Linux命令 如果你有一系列经常使用的Linux命令,你可 以把它们存储在一个文件中。Shell可以读取 以把它们存储在一个文件中。Shell可以读取 这个文件并执行其中的命令。 这个文件并执行其中的命令。这样的文件被称 为脚本文件 执行shell shell脚本 执行shell脚本 要创建一个shell脚本, shell脚本 要创建一个shell脚本,你要使用任何编辑器 比如vi vi在文本文件中编写它 比如vi在文本文件中编写它 为了使用bash shell来执行脚本magic,其命令 来执行脚本magic, 为了使用bash shell来执行脚本magic,其命令 是: $ bash magic 或 $ ./magic 为终端提示符(普通用户) $ 为终端提示符(普通用户)
本地和全局 Shell 变量(续) 12 变量(
环境变量( 环境变量(续) PS2变量 PS2变量 是为第二个提示符设置值的环境变量 LOGNAME变量 LOGNAME变量 包含用户的注册名字 $ echo “${LOGNAME}” SHLVL变量 SHLVL变量 该变量包含你当前工作的shell 该变量包含你当前工作的shell level
条件执行
test 和 [] 命令 求值表达式,并返回true (0)或 求值表达式,并返回true (0)或 false if构造 if构造 shell提供了循环和判定的构造 提供了循环和判定的构造, Linux shell提供了循环和判定的构造,可以 shell脚本中使用 在shell脚本中使用 算术测试 结合if构造, if构造 结合if构造,它可用于测试变量的数字值
22
case…esac 构造
shell脚本中使用的这个构造依据变量的 shell脚本中使用的这个构造依据变量的 值而执行一组特定指令
23
当变量的值和其中一个指定的值相匹配时, 当变量的值和其中一个指定的值相匹配时, 就执行写在该值下的一组命令
Example3
#!/bin/bash echo " List of Services Offered by Diaz Telecommunications " echo " 1) Global Roam" echo " 2) V-mail" Vecho " 3) Mail on Move" echo " 4) Caller-ID" Callerecho " 5) Dial a Pizza" echo –n "Select the service for which you need more information [1-5] : " [1read choice case $choice in 1) echo "You just need one cell-phone number wherever you travel across cellthe world." ;; 2) echo "You can record your messages when you are not able to take a call.";; 3) echo "You can receive e-mail messages on your cell-phone.";; ecell4) echo "You can display the callers telephone number on your handset screen whenever you receive a call so that you know who's calling.";; 5) echo "You can order for pizza from your cell-phone.";; cell*) echo "You have selected an invalid option.";; esac
17
条件执行( 条件执行(续)
串测试 test命令也可用于字符串 test命令也可用于字符串 文件测试 test命令也可用于检查文件的状态 test命令也可用于检查文件的状态 exit命令 exit命令 用于终止shell脚本的执行并返回到$ shell脚本的执行并返回到 用于终止shell脚本的执行并返回到$提示符 下
=:等于则为真 !=: !=:不相等则为真 -z字符串:字符串长度为零则为真 字符串: -n字符串:字符串长度不为零则为真 字符串:
20
test测试命令 test测试命令3 测试命令3
文件测试
-e文件名:如果文件存在则为真 文件名: 文件名: -r文件名:如果文件存在且可读则为真 文件名: -w文件名:如果文件存在且可写则为真 文件名: -x文件名:如果文件存在且可执行则为真 文件名: -s文件名:如果文件存在且至少有一个字符则为真 文件名: -d文件名:如果文件存在且为目录则为真 文件名: -f文件名:如果文件存在且为普通文件则为真 -c文件名:如果文件存在且为字符型特殊文件则为真 文件名: 文件名: -b文件名:如果文件存在且为块特殊文件则为真 -a 并且 –o 或者 ! 非
9
本地和全局 Shell 变量(续) 变量(
环境变量( 环境变量(续) 一些环境变量的例子是HOME, 一些环境变量的例子是HOME, PATH, PS1, PS2, LOGNAME, SHLVL, 及SHELL HOME变量 HOME变量 Linux系统中的每个用户都有一个相关的称 Linux系统中的每个用户都有一个相关的称 HOME的目录 作HOME的目录 当一个用户登录后,进入相应的HOME HOME的目录 当一个用户登录后,进入相应的HOME的目录 $ echo $HOME
15
Example1
编写一个shell脚本用于计算呼叫中心未应答的询问的数量。 编写一个shell脚本用于计算呼叫中心未应答的询问的数量。该脚本 shell脚本用于计算呼叫中心未应答的询问的数量 应该接收一天内所报告的询问的总数和应答的询问的数量, 应该接收一天内所报告的询问的总数和应答的询问的数量,以便计算 未应答的询问的数量。 未应答的询问的数量。
14
echo "The date is `date`”
expr命令 expr命令 用于求值算术表达式。 用于求值算术表达式。该命令的输出被发送到 标准输出 将在屏幕上显示9 $ expr 4 + 5 将在屏幕上显示9
命令替换( 命令替换(续)
算术展开: 算术展开: 你可以在$((… ))中括一个表达式 你可以在$((… ))中括一个表达式,用 中括一个表达式, 下面的命令来计算它的值: 下面的命令来计算它的值: $((expression))
16
所有未应答的询问的总数=所有询问的总数所有未应答的询问的总数=所有询问的总数-应答的询问的 数量
echo "Please enter the total number of queries reported today." read totalqueries echo "Please enter the number of queries answered." read answered pending=$((totalqueriespending=$((totalqueries-answered)) echo "Number of calls pending = $pending“ chmod +x callpending
8
读入值给变量 在执行shell脚本时,shell还允许用户 在执行shell脚本时,shell还允许用户 shell脚本时 从键盘中输入一个值给变量。 从键盘中输入一个值给变量。可以使用 read命令来做 read命令来做 $ read fname
本地和全局 Shell 变量
局部变量 当引用shell shell时 只有创建它的shell shell能够知道 当引用shell时,只有创建它的shell能够知道 到变量的存在 全局变量 称为子shell 称为子shell shell中创建的变量局部于创建它的shell,除 中创建的变量局部于创建它的shell, shell中创建的变量局部于创建它的shell,除 非使用export export命令特别指出是全局的 非使用export命令特别指出是全局的 环境变量 通过改变这些变量的值,用户能够定制此环境 通过改变这些/bin/bash echo "Enter the percentage of calls answered same day." read actual if [ $actual -le 80 ] then echo "Your Grade is Average." elif [ $actual -gt 80 -a $actual -le 90 ] then echo "Your Grade is Good." else echo "Your Grade is Outstanding." fi
本地和全局 Shell 变量(续) 变量(
环境变量( 环境变量(续) SHELL变量 SHELL变量 环境变量存储了用户的缺省shell 环境变量存储了用户的缺省shell env命令 env命令 可用来查看所有的已移出的环境变量表和 它们各自的值
13
命令替换
在单个命令行中使用多个命令的另一种方法(非 在单个命令行中使用多个命令的另一种方法( Pipes) Pipes)是通过命令替换
4
概述
echo命令 echo命令 用于在屏幕上显示消息 $ echo "This is an example of the echo command" 这是echo echo命令的一个例子 这是echo命令的一个例子