shell的要点
shell介绍就不介绍了,记录下shell的一些常用的要点总结,以后使用的时候可以直接查询。
1、shell的启动
每一个shell脚本的使用,都需要使用到脚本解释器。直接使用下面的脚本解释器
#!/bin/bash
我们可以通过 cat /etc/shell 命令查询linux中,那些命令是正确的

2、变量处理
shell中的变量分为3类:数字、字符串、文件,每一类的处理方式都不相同。
a、数值处理
数值运算、比较记录在下面表格


ps:==,!=与-eq ,-ne在[[]]中效果相同,在`expr `中需要使用到-ne,-eq来做比较。
b、字符串

字符串还有一些特殊的使用
${#varname}:输入字符串长度
${varname:index:long}:从第index开始截取long个字符
c、文件

d、逻辑操作

e、符号
单引号:使用会忽略特殊字符原样输出
双引号:使用会替换变量
反引号:将系统命令的输出插入到这个字符串,和$()一样,后者可移植性不高
$(commond ):功能和反引号一样。
((exp;exp;exp)):双括号一般做数值的扩展运算
eg:a=10
((a=a+1)) //直接在将a的值变为11,整个a都会变化。
b=$(( $a + 1 )) //将a的值加1,然后赋值给b,但是a不会变化。和b=`expr $a + 1`作用一样
ps:
1.`commond`和$(commond)作用一样,如果用来做数值运算,比较。则必须使用expr命令,`expr `和$(expr),或者直接用$((运算;比较))。
2.如果流程控制for做运算,如:c的for((int i ;i<num;i++)),则必须用(())双括号。
f、内部参数
执行命令:
# ls s1 s2 s3 s3 s5
解析的时候,会将输入的值做参数化处理
$0:./test2.sh 脚本的文件名
$1=s1...(一般$0为./xxx.sh,$1才是我们需要的参数)
$#=5 :多少个值
$?:上一个命令,正常退出返回0,反之为非0值。《《重要》》
$*="s1 s2 s3 s3 s5" 参数组成的字符串
我们一般使用 $? 来判断上一个命令是否执行成功,其返回值如下

e、数组
赋值
a=(1 2 3 4)
使用
${a} = 1 //输出第0个
${a[n]} (n为下标)
${a[@]}/${a[*]}:数组的所有值
${#a[@]}/${#a[*]}:数组的长度
3、流程控制
if流程
a、
if [[ 表达式 ]]
then 操作
elif [[ 表达式 ]]
then 操作
esle 操作
fi
for流程
使用一:
for varname IN item1 item2 (空格隔开)
do
#执行语句1
#执行语句2
done
使用二:
for ((int i ;i <num ;i++))
do
#执行语句
#执行语句
done
case流程
case ${varname} in
模式1)
#执行语句1...
#执行语句2...
模式2)
#执行语句1...
#执行语句2...
模式3)
#执行语句1...
#执行语句2...
break
esac
模式:${var_name}必须是变量或常数
Ⅰ.自然数
Ⅱ.字符串,[pattern],使用的是正则表达式匹配
while流程
while [[表达式]]
do
#执行语句1...
#执行语句2...
done
unitl流程
until循环执行一系列命令直至条件为真时停止。
until [[表达式]]
do
执行语句
执行语句
done
4、键盘输入
使用(需要使用空格间隔开)
read var1 var2 var3
用户输入:
a b c
结果:var1=a,var2=b,var3=c
5、函数
定义:
function function_name(){
list of commands;
[return value]
}
删除:
unset .f function_name
ps:将函数作为一个命令来使用,也就是可以使用$?,$*,$#;来做判断
6、sleep
睡眠多少秒
echo "now : `date` "
sleep 10
echo "now : `date` "
输出
now : Mon May 23 14:59:40 CST 2016
now : Mon May 23 14:59:50 CST 2016
浙公网安备 33010602011771号