shell程序设计教程(2)
Shell的语法
变量
在shell里,使用变量之前通常并不需要实现为他们做出声明。默认情况下,所以变量都被看做字符串来存储,即使它们被赋值为数值也是如此。shell和一些工具程序会在需要时把数值型字符串转换为对应的数值以对它们进行操作。Linux大小写敏感。
在shell中,我们可以通过在变量名前加一个$符号来访问它的内容。无论何时想获取变量的内容,我们都需要在它前面加上一个$字符。当为变量赋值时,我们只需要使用变量名。
如果字符串里包含空格,就必须用引号把他们括起来。还要注意在等号两边不能有空格。
我们可以通过使用read命令将用户的输入赋值给一个变量。这个命令需要一个参数,即准备读入用户的数据的变量名,然后它会等待用户输入数据。通常情况下,用户按下回车键时,read命令结束。
1,使用引号
如果在一个参数中包含一个或多个空白符(例如,空格,制表符或者换行符),就必须给参上加上引号。像$myvar这样的变量在引号中的行为取决于你所使用的引号类型。如果你把一个带有$字符的变量放在双引号中,程序执行到这一行就会把变量替换为它的值;如果你把它放在单引号中,就不会发生替换现象。还可以通过在$字符前机上一个\字符取消它的特殊含义。
字符串通常放在双引号中,以防止他们被空白符分开。
复制代码 代码示例:
#! /bin/bash
myvar="Hi there"
echo $myvar
echo "$myvar"
echo '$myvar'
echo \$myvar
echo Enter some text
read myvar
echo '$myvar' now equals $myvar
exit 0
输出结果:
Hi there
Hi there
$myvar
$myvar
Enter some text
HelloWorld
$myvar now equals Hello World
2. 环境变量
当一个shell脚本程序开始运行时,一些变量会根据环境设置中的值进行初始化。这些变量通常用大写字母做名字,以便区分用户在脚本程序里定义的变量,后者按惯例用小写字母做名字。
复制代码 代码示例:
#HOME 当前用户的主目录
#PATH 以冒号分隔的用来搜索命令的目录列表
#PS1 命令提示符,通常是$字符,但在bash中,你可以使用一些更复杂的值。
#PS2 二级提示符,用来提示后续的输入,通常是>字符
#IFS 输入域分隔符
$0 SHELL脚本的名字
$# 传递给脚本的参数个数
$$ shell脚本的进程号
3. 参数变量
$1,$2… 脚本程序的参数
$* 在一个列表中列出所有的参数,各个参数之间用环境变量IFS的第一个字符分隔开
$@ 它是$*的一种精巧的变换,不使用IFS,使用当IFS为空时,参数的值也不会结合在一起。
可以通过下面这个例子看出$*和$@的区别
复制代码 代码示例:
chen123@ubuntu:~/C++$ IFS=''
chen123@ubuntu:~/C++$ set foo bar bam
chen123@ubuntu:~/C++$ echo "$@"
foo bar bam
chen123@ubuntu:~/C++$ echo "$*"
foobarbam
chen123@ubuntu:~/C++$ unset IFS
chen123@ubuntu:~/C++$ echo "$*"
foo bar bam
chen123@ubuntu:~/C++$
实验:参数和环境变量
脚本程序:
复制代码 代码示例:
#! /bin/sh
salutation="Hello"
echo $salutation
echo "The program $0 is nowrunning"
echo "The second parameter was$2"
echo "The first parameter was $1"
echo "The parameter list was $*"
echo "The user's home directory is$HOME"
echo "Please enter a newgreeting"
read salutation
echo $salutation
echo "The script is now complete"
exit 0
输出结果:
Hello
The program ./hird is now running
The second parameter was
The first parameter was
The parameter list was
The user's home directory is /home/chen123
Please enter a new greeting
SIre
SIre
The script is now complete
条件
test或[命令
为增强可读性,当使用[时,我们还是用符号]来结尾。
以一个最简单的条件为例来介绍test命令的用法:检查一个文件是否存在。用于实现这一操作的命令是test –f <filename>,所以在脚本程序里我们写出如下的代码:
if test –f fred.c
then
…
fi
或用[可以写成如下:
if [ -f fred.c ]
the
…
fi
注意必修在[符号和被检查的条件之间留出空格。
test命令可以使用的条件类型可以归为三类:字符串比较、算术比较和与文件有关的条件测试。
举例:
复制代码 代码示例:
#! /bin/sh
if [ -f /bin/bash ]
then
echo "file /bin/bash exits"
fi
if [ -d /bin/bash ]
then
echo "/bin/bash is a directory"
else
echo "/bin/bash is NOT a directory"
fi
输出:
file /bin/bash exits
/bin/bash is NOT a directory
控制结构
if语句:
if condition
then
statements
else
statements
fi
elif语句
if condition
then
statements
elif condition
statements
else
statements
fi
for语句
for variable in values
do
statements
done
实验:使用固定字符串的for循环
for variable in values
do
statements
done
输出:
bar
fud
43
实验:使用通配符扩展的for循环
复制代码 代码示例:
#! /bin/sh
for file in $(ls f*.sh);
do
lpr$file
done
exit 0
这个例子演示了$(command)用法。for命令的参数表来自括在$()中的命令的输出结果。
while语句
while condition do
statements
done
until语句
until condition
do
statement
done
case语句
case variable in
pattern[ | pattern]…) statements;;
pattern[ | pattern]…) statements;;
esac
命令列表
AND列表
statement && statement2 && statements && …
OR列表
statement || statement || statement || …
语句块
如果想在某些只允许使用单个语句的地方使用多条语句,可以把它们括在括号{}中构造一个语句块。
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/shell/7276.shtml
相关文章
热门TAG
命令 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 技巧 权重 服务器 网站流量 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows 蜘蛛 搜索引擎 网站收录 JSP 实例解析最新文章
-
PHP生成奖状
时间:2021-01-06
-
python实现输入五个数并求
时间:2021-01-06
-
php检测网站是否正常打开
时间:2021-01-05
-
python怎么右对齐
时间:2021-01-05
-
Python3爬虫入门之Python3的安
时间:2021-01-05
-
如何用PHP接收http请求头信
时间:2021-01-05
-
数据库怎么连接用php写的
时间:2021-01-05
-
php后缀怎么打开
时间:2021-01-05
热门文章
-
解析shell字段分隔符的用法(图文)
时间:2020-12-22
-
Python3爬虫进阶:MongoDB存储(非关系型数
时间:2020-12-29
-
如何在Linux或者UNIX下调试Bash Shell脚本
时间:2020-12-22
-
关于php中匿名函数与回调函数的详解
时间:2020-12-29
-
php文档怎么打开
时间:2020-12-29
-
php检测网站是否正常打开
时间:2021-01-05
-
PHP PHP_EOL 换行符
时间:2020-12-29
-
python实现输入五个数并求平均值
时间:2021-01-06
-
浅谈Linux Shell的管道与重定向
时间:2020-12-23
-
如何检测Django是否安装成功
时间:2020-12-29
