shell语法
一 变量
1.普通变量
在默认情况下变量都被看作字符串并以字符串来存储。当你为变量赋值时你只需要使用变量名,来访问变量内容时需要在变量名前面加上一个$符号,使用方式如下:
$state=hello
$echo $state
hello
变量配合引号的高级使用:
源代码
#!/bin/sh
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
Hello Word
$myvar now equals Hello World
2.环境变量
变量 | 说明 |
---|---|
$HOME | 当前用户的家目录 |
$PATH | 系统搜索路径的列表 |
$PS1 | 命令提示符,通常是$字符 |
$PS2 | 二级提示符,用来提示后续输入,通常为>字符 |
$0 | 输入脚本的名字 |
$1/$2/$3 | 脚本的第1 2 3个参数 |
$# | 传递给脚本的参数个数 |
$$ | shell脚本的进程号 |
$IFS | 输入域分隔符,一般与$*配合使用 |
$* | 在一个变量中列出所有的参数,使用$IFS变量分隔开 |
$@ | 在一个变量中列出所有的参数,常用来代替$*使用,简单方便 |
下面用一个简单的例子对上述变量进行阐述:
$IFS=''
$set foo bar bam
$echo "$@"
foo bar bam
$echo "$*"
foobarbam
unset IFS
$echo "$*"
foo bar bam
二 条件语句,test或[
下面两段代码意义相等
if test -f fred.c
then
...
fi
if [ -f fred.c ]
then
...
fi
test命令有很多选项,具体使用时可以详细查询。
三 控制结构
1.if语句
if语句的常用语法
if condition1
then
statements
elif condition2
then
statements
else
statements
fi
2.for语句
for variable in values
do
statements
done
在使用for循环时,常用通配符进行扩展。
3.while语句
while conditions
do
statements
done
4.until语句
until condition
do
statements
done
循环将反复执行,直到条件为真。
5.case语句
以下面的例程进行说明
#!/bin/sh
echo "Is this morning? Please answer yes or no"
read timeofday
case "$timeofday" in
yes | y | YES | Y)
echo "Good Morning"
echo "early this morning"
;;
[Nn]*)
echo "Good Afternoon"
;;
*)
echo "Answer is not recognized"
echo "Please answer yes or no"
exit 1
;;
esac
本示例说明了case条件下多行代码的写法和每条结束语句中需要使用;;
符号进行分割。
6.命令列表
命令连接常用&&
和||
,使用方式也类似于C语言中的and和or。如果连接的是一个代码语句块,该语句块可以使用{}
花括号括起来。
四 输出重定向
ls -1 > lsoutput.txt
这条命令把ls命令的输出保存到文件lsoutput.txt中。
文件描述符0代表一个程序的标准输入,1代表标准输出,2代表标准错误输出。
ps >> lsoutput.txt
上条语句>>
将输出内容附加到lsoutput.txt中,而不是覆盖文件。