对于shell的定义在此就不在此详述了,各个操作系统都有它自己的shell,想知道shell的类型可以使用命令echo $SHELL来查看,比如你有一个test.sh,你可以使用sh test.sh、source test.sh、chmod +x test.sh ./test.sh来执行shell脚本。
1. 变量,分为系统变量、用户变量、环境变量
表示方法 | 描述 |
$n | $1表示第一个参数....,大于10后要加括号 |
$# | 命令行参数个数 |
$0 | 当前程序的名称 |
$? | 前一个命令或者函数的返回值 |
$* | 以参数1、参数2的形式保存所有参数 |
$@ | 同上 |
$$ | 本进程的PID |
$! | 上一个命令的PID |
用户变量必须由字母数字及下划线组成,并且变量名的第一个字符不能为数字,变量名是大小写敏感的,特别要注意的是变量名和“=”之间不要有空格,“=”和赋值间也不要有空格,其赋值可以如下所示test=“hello”,引用变量使用${test}
2. 条件测试,条件测试一般分为test测试和表达式测试,表达式测试永远整数值和字符串的测试操作,test测试包括文件状态测试、逻辑测试、字符串测试、数值测试,test的格式为test condition或者直接[ condition ],注意前后要有空格
字符串比较有:
str1 = str2 两个字符串相同结果为真 str1 != str2 两个字符串不相同结果为真,中间要有空格,例如,
TMP1="HELLO"
TMP2="TEST"
test ${TMP1} = ${TMP2}或者[ ${TMP1} = ${TMP2} ]
算术比较
expr1 -eq expr2 两个表达式相等为真 expr1 -ne expr2 两个表达式不等为真
expr1 -gt expr2 expr1大于expr2则为真 expr1 -ge expr2 expr1大于等于expr2则为真
expr1 -lt expr2 expr1小于expr2则为真 expr1 -le expr2 expr1小于等于expr2则为真
文件测试
-e file 文件存在则为真 -r file 文件可读为真
-d file 文件为一个目录为真 -w file 文件可写为真
-f file 是一个普通文件则为真 -x file 文件可执行为真
-s file 文件长度不为0则为真 -o file 文件或者目录归真正用户所有
逻辑操作
!expr 逻辑表达式求反 expr1 -a expr2 两个逻辑表达式与
expr1 -o expr2 两个逻辑表达式或
条件语句
if [表达式] ;then
语句
elif [表达式];then
语句
else
语句
fi
case语句
case 变量 in
str1)
语句;;
str2)
语句;;
*)
语句;;
esac
循环语句
for var in list;do
语句
done
while 表达式;do
语句
done
until 表达式;do
语句
done
select item in itemlist;do -- 如果没有提供itemlist则使用位置参数
语句
done
shift语句,如果要向一个shell脚本传递信息,可以使用位置参数完成此功能,shift命令用来将命令行参数左右,也可以指定左移的位数,如shift n
3. 函数,要定义一个shell函数,只需要简单的写出它的名字,然后是一对空括号,再把有关的语句放在一对花括号中即可
function()
{
语句
}
4. 杂项命令
break -- 从for/while/until循环中退出
continue -- 跟C语言的作用一样
exit n -- 以退出码n退出脚本运行
return -- 函数返回
export -- 将变量导出到shell,使之成为shell的环境变量
set -- 为shell设置参数变量
unset -- 从环境中删除变量或者函数
read -- 输入参数
stty -- 取消回显
``用在产生的结果不会再送给shell解释,而只作为赋值时直接使用,文本输出时与""配合使用;
()有在产生的结果还会再作进一步解释时,用与不用都可以,属于"脱裤子放屁"类型的,故除了提高程序可读性之外,一般不使用
当然shell不止那么简单,这只是基础中的基础,shell可以与sed、awk、grep等一起使用,要能更熟练的使用shell来编写脚本还有很长的路要走。