您的位置:首页 > 运维架构 > Shell

shell的要点

2016-05-23 00:00 441 查看
摘要: shell介绍就不介绍了,记录下shell的一些常用的要点总结,以后使用的时候可以直接查询。

shell的要点

shell介绍就不介绍了,记录下shell的一些常用的要点总结,以后使用的时候可以直接查询。

1、shell的启动

每一个shell脚本的使用,都需要使用到脚本解释器。直接使用下面的脚本解释器

[code=plain]#!/bin/bash

我们可以通过 cat /etc/shell 命令查询linux中,那些命令是正确的



2、变量处理

shell中的变量分为3类:数字、字符串、文件,每一类的处理方式都不相同。

a、数值处理

数值运算、比较记录在下面表格





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

b、字符串



字符串还有一些特殊的使用

[code=plain]${#varname}:输入字符串长度
${varname:index:long}:从第index开始截取long个字符

c、文件


d、逻辑操作


e、符号

[code=plain]单引号:使用会忽略特殊字符原样输出

双引号:使用会替换变量

反引号:将系统命令的输出插入到这个字符串,和$()一样,后者可移植性不高

$(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、内部参数

[code=plain]执行命令:
# ls s1 s2 s3 s3 s5

解析的时候,会将输入的值做参数化处理
$0:./test2.sh 脚本的文件名
$1=s1...(一般$0为./xxx.sh,$1才是我们需要的参数)
$#=5 :多少个值
$?:上一个命令,正常退出返回0,反之为非0值。《《重要》》
$*="s1 s2 s3 s3 s5" 参数组成的字符串

我们一般使用 $? 来判断上一个命令是否执行成功,其返回值如下



e、数组

[code=plain]赋值
a=(1 2 3 4)

使用
${a} = 1 //输出第0个
${a
} (n为下标)
${a[@]}/${a[*]}:数组的所有值
${#a[@]}/${#a[*]}:数组的长度


3、流程控制

if流程

[code=plain]a、

if [[ 表达式 ]]
then  操作
elif [[ 表达式 ]]
then  操作
esle  操作
fi

for流程

[code=plain]使用一:
for varname IN item1 item2 (空格隔开)
do
#执行语句1
#执行语句2
done

使用二:
for ((int i ;i <num ;i++))
do
#执行语句
#执行语句
done

case流程

[code=plain]case ${varname} in
模式1)
#执行语句1...
#执行语句2...
模式2)
#执行语句1...
#执行语句2...
模式3)
#执行语句1...
#执行语句2...
break
esac

模式:${var_name}必须是变量或常数
Ⅰ.自然数
Ⅱ.字符串,[pattern],使用的是正则表达式匹配

while流程

[code=plain]while [[表达式]]
do
#执行语句1...
#执行语句2...
done

unitl流程

[code=plain]until循环执行一系列命令直至条件为真时停止。
until [[表达式]]
do
执行语句
执行语句
done


4、键盘输入

[code=plain]使用(需要使用空格间隔开)
read var1 var2 var3

用户输入:
a b c

结果:var1=a,var2=b,var3=c


5、函数

[code=plain]定义:
function  function_name(){
list of commands;
[return value]
}

删除:
unset .f function_name

ps:将函数作为一个命令来使用,也就是可以使用$?,$*,$#;来做判断


6、sleep

睡眠多少秒

[code=plain]echo "now : `date` "
sleep 10
echo "now : `date` "

输出

[code=plain]now : Mon May 23 14:59:40 CST 2016
now : Mon May 23 14:59:50 CST 2016
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell