Shell概述
Shell既是一种命令语言,又是一种程序设计语言(既Shell脚本)。
She可以交互式地解释和执行用户输入的命令;也可以定义各种变量,传递参数,并提供许多高级语言所具有的流程控制结构。
Shell不属于Linux系统内核,可以调用系统内核的大部分相关功能来执行程序,创建文档并以并行的方式协调各个程序的运行。
1、资源重定向:既使用用户指定的文件来获取或接收信息。
输入重定向:命令<文件名
以wall命令举例:wall<file
系统会将文件file中的内容作为命令wall的输入,发给所有用户。
输出重定向:命令>文件名
以cat命令举例:cat /etc/passwd>file
系统会清空file文件,并将/etc/passwd的结果输出到file文件中。
可使用>>运算符,以追加形式输出到file。
错误重定向:命令 2>file
以gcc命令举例:gcc -c hello.c -o hello 2>file
系统会将gcc编译时产生的错误信息输出到文件file中。
2、管道:将多个简单命令连接起来,管道符号为 |
举例:ls -l /etc | grep init
输出/etc目录下包含init的关键字的文件详细信息。
3、命令连接符:连接多条shell指令
; 连接符:前后命令,先后次序依次执行。
&&连接符:前后命令,执行遵循逻辑与关系。
||连接符:前后命令,执行遵循逻辑或关系。
4、文本提取器命令:提取文档或标准输出的文本信息
awk [-F 分隔符1] ‘{print $1[“分隔符2”]$2}’
例:cat /etc/passwd| awk -F: ‘{printf $1 " " $3 " "}’
解释:
分隔符1指定源文件的分隔符,缺省的情况下,以空格默认为分隔符。
分隔符2指定打印内容中的分隔符,缺省的情况下,打印的内容不进行分隔。
$1和$3分别代表文本分割后的第一项和第二项的内容。
Shell编程
第一个Shell程序
#!/bin/sh
data="First Shell script:"
echo "data is:"
echo $data
exit 0
Shell中以#开头的一般为注释行,
第一行的 #!/bin/sh
是一种特殊的注释,#!
后的参数表明了系统将会调用那个程序来执行该脚本。
1、变量的定义
变量名=值
注意:无须定义,没有细致的分类,给变量赋值时,赋值号两边不能有空格,需把值放在单引号和双引号之间。
例: var='Hello Shell'
2、变量的引用
使用$符号来引用变量
例:
var="Hello"
echo $var 输出var的值,Hello
echo "$var" 输出var变量中存储的值,Hello
echo '$var' 输出为原样,$var
3、变量的输入
通过read关键字读取变量。
read tmp
4、变量的分类
1)环境变量,又成永久变量
使用export设定
export num=1
2)位置变量
既执行脚本时传入脚本对应脚本位置的变量。
例:
#!/bin/sh
echo "var:"$#
echo "var name:"$0
echo "first var:"$1
echo "second var:"$2
echo "third var:"$3
exit 0
运行:sh file a b c
由输出结果可分析位置变量
var:3
var name:first
first var:a
second var:b
third var:c
3)标准变量
标准变量也是环境变量,在bash环境建立时生成。
通过查看etc目录下的profile文件可以查看系统中的标准环境变量
4)特殊变量
? 前一个命令执行情况,0表示成功,其他值表示失败
$ 运行当前脚本的当前进程id号
! 运行脚本最后一个命令
* 传递给脚本或函数的全部参数
5、变量的运算符
1)let 算术运算和数值表达式测试
例:
#!/bin/sh
i=1
let i=i+2
echo "i="$i
let i=i+4
echo "i="$i
输出结果:
i=3
i=7
2)expr 对整形变量进行算术运算
例:
#!/bin/bash
a=4
b=5
let c=a+b
echo $c
let "f = b + c"
echo $f
((d=a+c))
echo $d
e=`expr $a + $d`
echo $e
输出结果:
9 14 13 17
Shell 条件语句 语法
1、if条件语句
1)单分支if语句格式:
if [条件判断语句];then
fi
2)双分支if语句
if [条件判断语句];then
else
fi
3)多分支
if [条件判断语句];then
elif [条件判断语句];then
else
fi
2、test
test 选项 参数
如检测某个文件是否存在
if test -f file
then
.
.
fi
3、select语句
格式:
select 变量 in 列表
do
...
[break]
done
4、case 语句
case var in
选项 1 ) ...;;
'选项 2') ...;;
"选项 3") ...;;
...
*)...
esac
exit 0
实例:
#!/bin/sh
echo -e "a:\c"
read a
echo -e "b:\c"
read b
echo -e "select(+-*/):\c"
read var
case $var in
'+')echo "a+b="'expr $a"+" $b';;
'-')echo "a-b="'expr $a "-" $b';;
'*')echo "a*b="'expr $a "*" $b';;
'/')echo "a/b="'expr $a "/" $b';;
*) echo "error"
esac
exit 0
Shell循环语句
1、for循环
for 变量 in 变量列表
do
...
done
2、while 循环
while [表达式]
do
...
done
3、until 循环
until [表达式]
do
...
done
Shell中的函数
[function] 函数名 [()]
{
函数体,代码段
[return int]
}
调用 :函数名
关键字:local
,限制变量的作用范围为函数中。
Linux Shell脚本经典案例
Linux Shell 编程实例进阶
2020/7/17 19:30