输入重定向 : command [参数] < 文件名
输出重定向 : command [参数] > 文件名
输出重定向追加 : command [参数] >> 文件名
在源文件的内容后面追加
Shell使用管道将一个命令的输出直接作为另一个命令的输入
通过使用管道符 ‘|’ 来建立一个管道:
command_a [参数] | command_b [参数]
通配符用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。
'
): 由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后也会失去原有意义,而只作为普通字符解释。"
): 由双引号括起来的字符,除“$”、“\”、“’”、和“””这几个字符仍是特殊字符并保留其特殊功能外,其余字符作为普通字符对待。`
): 反引号(`
)括起来的字符串被shell解释为命令,在执行时,shell首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。string = "current directory is `pwd`"
(4.1)命令别名通常是其他命令缩写,用来减少键盘输入。命令格式为:
alias new-name = 'original-command'
(4.2)取消别名:
unalias new-name
(4.3)不加参数的alias命令执行结果将显示当前系统中定义的所有命令别名
history
(5.1)通过history命令可以对当前系统中执行过的所有shell命令进行显示
(5.2)若想重复执行命令历史中指定的命令,可使用如下格式:
!命令编号
(5.3)环境变量HISTSIZE的值保存历史命令记录的总行数,该值的范围正常情况下是100~1000,当从shell中退出时,最近执行的命令将保存在HISTFILE变量指定的文件中。
HISTSIZE和HISTFILESIZE的区别:
Shell脚本是用shell命令编写的文件,也称为shell script。与结构化程序不同,shell不需要编译成目标程序,也不需要链接成可执行的目标码,shell是按行一条接着一条地解释并执行shell脚本中的命令。
chomd u+x file_name
./filename
sh filename
. filename
在shell脚本中也可以使用变量,一个变量就是内存中被命名的一块存储空间。
注意:如果字符串里包含空格,就必须用引号把它们括起来。还要注意在等号两边不能有空格。
无论何时想要获取变量内容,必须在它前面加$字符。
var_name=hello
echo $var_name
设置的变量不需要时可以清除,清除变量格式如下:
unset variable-name
env
如果脚本程序在执行时带有参数,就会创建一些额外的变量,这些额外的变量因跟变量所在命令行位置有关,因此被称为位置变量或位置参数。
shell提供的位置变量有$0、$1、$2、$3、$4、$5、$6、$7、$8、
$9。
这10个位置变量在shell脚本执行时用于存放shell脚本名及参数。
其中位置变量**$0存放脚本名**,$1、$2、$3、$4、$5、$6、$7、$8、$9存放从左至右的命令行上的参数。
当命令行上命令参数超过9个时,shell提供了shift命令可以把所有
参数变量左移一个位置,使$2变成$1,$3变成$2,依此类推。
shift [n]
shell中有一些变量是系统定义的,有特殊的含义,变量值由系统指定,被称之为特殊变量:
$#
:表示传递给脚本的实际参数个数。$$
:当前shell脚本的进程号。$*
:位置参数的值,各个参数之间用环境变量IFS中定义的字$@
:也表示位置参数的值,它不使用IFS环境变量,所以当IFS为空时,参数值不会结合在一起。$!
:上一个后台命令的进程号。$?
:执行最后一条命令的退出状态。read var
输入的内容...
echo $var
输出 输入的内容
export命令可将在shell脚本中定义的变量导出到子shell中,并使之在子shell中有效。
export
命令用于将shell
变量输出为环境变量,或者将shell
函数输出为环境变量。
export
命令可用于显示或设置环境变量。export
命令的效果仅限于当前登录终端。export [-fnp] [变量名]=[变量设置值]
参数说明:
-f
:代表[变量名称]中为函数名称。-n
:删除指定的变量;实际未删除,只是不会输出到后续指令的执行环境中。-p
:显示所有的shell
赋予子程序的环境变量。实例1:显示当前所有的环境变量
$ export -p
实例2:设置环境变量
$ export PATH=$PATH:/home/dabai/test/bin
所有程序设计语言的基础是对条件进行测试判断,并根据测试结果采取不同的操作
两种条件测试命令,语法格式如下:
注意:使用第二种方法进行条件测试时,必须在[ ]前后保留空格,否则shell提示error。
三种测试类型:
在进行条件判断时,shell提供了复杂的逻辑运算,分别是:AND运算和OR运算
$$
,语法格式为:statement1 && statement2 && statement3
||
bash提供了3种方法对数值数据进行算术运算:
expr命令将它的参数当作一个表达式来求值。语法格式:
expr experssion
注意:在使用expr时,运算符前后要有空格,且乘法要用
“\”转义,即“*”的形式。
该命令用于计算一个expression并返回它的值。
a=2 b=3
echo "the result of a+b is $((a+b))"
用来求算术表达式的值,如果最后表达式的值为0,let命令返回1;否则返回0。语法格式为:
let experssion
注意:使用let命令时,变量前的$不是必须的,乘法也
不需转义使用
if condition
then
statements
else
statements
fi
if condition ; then
if condition ; then
if condition ; then
statements
fi
fi
fi
if condition1 ; then
statements
elif condition2 ; then
statements
elif condition3 ; then
statements
……
else
statements
fi
if condition1
then
statements
elif condition2
then
statements
elif condition3
then
statements
……
else
statements
fi
case variable in
pattern1) statements;;
pattern2) statements;;
……
patternn) statements;;
*) statements;;
esac
实例(根据数字输出星期几):
#!/bin/bash
echo "please enter the number of the week:"
read number
case $number in
1) echo "Monday";;
2) echo "Tuesday";;
3) echo "Wednsday";;
4) echo "Thursday";;
5) echo "Friday";;
6) echo "saturday";;
7) echo "Sunday";;
*) echo "your enter must be in 1-7.";;
esac
#!/bin/bash
echo " abc is the user's name? please answer yes or no"
read name
case "$name" in
y|Y|yes|YES) echo "hello abc!";;
n*|N*) echo "abc isn't the user's name?";;
*) echo "sorry,your input isn't recognized.";;
esac
exit 0
#!/bin/bash
echo " abc is the user's name? please answer yes or no"
read name
case "$name" in
y|Y|yes|YES)
echo "hello abc!"
echo "yes!";;
n*|N*)
echo "abc isn't the user's name?"
echo "no!";;
*)
echo "sorry,your input isn't recognized."
echo "please answer yes or no"
exit 1
;;
esac
exit 0
for variable in values
do
statements
done
while condition
do
statements
done
until语句与while语句一样,都是循环语句,但处理方式正好相反,即当判断条件为真时,循环停止:
until condition
do
statements
done
和C语言基本一致。
break命令的功能是在控制条件未满足之前,跳出for、while或until循环。
使for、while或until循环跳到下一次循环继续执行,循环变量取循环列表中的下一个值。
语法格式:
function_name ( ) {
statements
}
通常将函数看成是脚本中的一段代码,在使用函数前必须先定义该函数,使用时利用函数名直接调用。调用也和编程语言类似。
set
命令给脚本指定位置参数,一旦使用set设置了传入参数的值,脚本将忽略运行时传入的位置参数,实际上是被set命令重置了位置参数的值。使用 set
命令修改位置参数(即脚本参数 $1
、$2
等)。例如:
set -- arg1 arg2 arg3
或者
set arg1 arg2 arg3
$1
的值将是 “arg1″,$2
的值将是 “arg2″,依此类推。