Shell脚本入门

最近发现公司不少脚本都是shell脚本,平时有些命令仍是能用的,可是就没写过shell脚本,致使有些公司项目里面的bash脚本看不懂。因此学习下关于shell的内容。java

1、shell基本概念linux

    1.运行方式        shell

        解释运行,底层是C写好的执行,至关于经过函数名调用函数。bash

        交互式:输入一个shell命令就执行。函数

        批处理:把一连串个shell命令经过判断,循环等控制语句写到文件里面,一次性执行。
学习

    2.bash分类:Unix默认使用的shell是sh,linux默认使用的shell是bash。还有ash,ksh,tcsh,等等。
spa

2、第一个shell脚本
code

#!/bin/bash
echo "Hello World !"

#!/bin/bash  是约定的标记,告诉系统须要经过什么解释器来执行。进程

chmod +x ./test.sh  #使脚本具备执行权限
./test.sh  #执行脚本

 chmod +x ./test.sh  让test.sh标记为可执行脚本。执行的以后若是不加./ 则系统会从/bin  /sbin  /usr/bin /usr/sbin等path路径下找文件。it


3、bash语法

1.定义变量的时候不要加上"$"符号,定义以及赋值的时候“=”和变量名以及值不能有空格  NAME=JACK是对的 NAME = JACK就是无效的。

2.readonly  NAME  只读变量

3.read NAME   从command中读取输入值赋给NAME

4.unset  NAME  删除变量

5.特殊的变量  

$0 当前脚本的文件名

$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。

$# 传递给脚本或函数的参数个数。

$* 传递给脚本或函数的全部参数。

$@ 传递给脚本或函数的全部参数。被双引号(" ")包含时,与 $* 稍有不一样,下面将会讲到。

$? 上个命令的退出状态,或函数的返回值。

$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

$* 和 $@ 的区别


$* 和 $@ 都表示传递给函数或脚本的全部参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出全部参数。


可是当它们被双引号(" ")包含时,"$*" 会将全部的参数做为一个总体,以"$1 $2 … $n"的形式输出全部参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出全部参数。

echo `expr $a + $b`

`expr `里面能够写表达式


+ 加法 `expr $a + $b` 结果为 30。

- 减法 `expr $a - $b` 结果为 10。

* 乘法 `expr $a \* $b` 结果为  200。

/ 除法 `expr $b / $a` 结果为 2。

% 取余 `expr $b % $a` 结果为 0。

= 赋值 a=$b 将把变量 b 的值赋给 a。

== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。

!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。


关系运算符列表

运算符 说明 举例

-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。

-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。

-gt 检测左边的数是否大于右边的,若是是,则返回 true。 [ $a -gt $b ] 返回 false。

-lt 检测左边的数是否小于右边的,若是是,则返回 true。 [ $a -lt $b ] 返回 true。

-ge 检测左边的数是否大等于右边的,若是是,则返回 true。 [ $a -ge $b ] 返回 false。

-le 检测左边的数是否小于等于右边的,若是是,则返回 true。 [ $a -le $b ] 返回 true。

6.if 语句

a=100
b=120
if [ $a == $b]
then
echo '$a == $b'
else
echo '$a != $b'
fi
#!/bin/bash
a=100
b=120
if [ $a == $b ]
then
echo '$a == $b'
elif [ $a -gt $b ]
then
echo '$a > $b'
else
echo '$a < $b'
fi

7.case

#!/bin/bash

var="$1"

case $var in

        "ab") echo "aaa"
        ;;
        bc) echo "bbb"
        ;;
        *) echo "`basename $0`:usage: [-a] | [-b]"
        ;;
esac

8.for循环

#!/bin/bash

for str in "a" "b" "c"
do
        echo $str
done
#!/bin/bash

for FILE  in $HOME/.vi*
do
        echo $FILE
done

9.while循环

count=0

while [ $count -lt 10 ]
do
        echo "$count"
        count=`expr $count+1`
done

10.函数

hello() {
    echo "hello $1"
}
hello "Jack"


11.输入输出重定向

ps -ef | grep java > test.txt    #会覆盖test.txt内容
ps -ef | grep java >> test.txt   #追加内容到test.txt中

12.引入其余shell文件

#!/bin/bash
name="jack"
hello(){
  echo "hello"
}
#!/bin/bash


. ./function.sh
hello
echo $name
相关文章
相关标签/搜索