shellscript入门

ShellScript入门

一、SellScript快速入门

1.使用vim 创建hello.sh:

#!/bin/bash
echo "hello,world!!!"

每一个shell脚本都必须在首行打上 #!/bin/bash 代表此为脚本文件,且文件的后缀名为.sh 。

echo " "为输出语句相当于Java的System.out.println(“”);

#为单行注释 ,

:<

为多行注释

2.shell脚本运行的两种方式:

第一种 将.sh文件的用户权限添加一个可执行的权限 ./../../脚本名

使用 vim 创建一个shell脚本的 读写状态码为: -rw-r--r--. 1 root root 34 Aug 30 09:26 hello.sh 。因此需要给

chmod  u+x hello.sh

使其变为 -rwxr--r--. 1 root root 34 Aug 30 09:26 hello.sh

再使用./../../脚本名 执行脚本,具体案例如下:

[root@0003 shcode]# ./hello.sh 
hello,world!!!

第二种 直接使用sh 脚本文件的命令运行(此方法可以不用修改文件权限):

[root@0003 shcode]# sh hello.sh 
hello,world!!!
二、变量入门

1.定义变量

#定义变量A
A=100

2.输出变量(输出变量需要在变量前添加 $ 符号)

#输出变量需要加上$
echo $A
echo "A=$A"

输出结果为:

100

A=100

3.撤销变量

#撤销变量A
unset A
echo "A=$A"

输出结果为:

A=

4.将命令返回数据赋予变量(1.将命令使用反引号``包起来 , 2.使用$()把命令包起来)

#将命令的返回值赋给变量
C=`date`
D=$(date)
echo "$C"
echo "$D"
三、位置参数变量

$n $0 代表命令本身,$1-9 代表第一个到第九个的参数 ,10个以上的参数需要用大括号包含 ${10}

echo "0=$0 1=$1 2=$2"

$* 代表这个命令行中所有的参数,且将这些参数看为一个整体。

echo "所有的参数=$*"

$@ 代表这个命令行中所有的参数,且将这些参数看为不同的个体。

echo "$@"

$# 代表这个命令行各个参数的信息。

echo "参数的个数=$#"

如上运行结果为:

[root@0003 shcode]# sh position.sh 170000 30000
0=position.sh  1=170000  2=30000
所有的参数=170000 30000
170000 30000
参数的个数=2
四、预定义变量

$$ 表示当前的进程编号

echo "当前执行的进程ID=$$"

$! 表示后台运行的进程编号

# 以后台运行一个脚本,并获取它的进程号
/opt/shcode/position.sh 30000 170000 &
echo "最后一个方式运行的进程id=$!"

$? 在脚本中 $? 上一个执行命令的状态,为0则表示成功,不为0则表示失败。

echo "执行的结果是=$?"

输出结果为:

[root@0003 shcode]# sh perVar.sh 
当前执行的进程ID=5650
最后一个方式运行的进程id=5651
执行的结果是=0
[root@0003 shcode]# 0=/opt/shcode/position.sh  1=30000  2=170000
所有的参数=30000 170000
30000 170000
参数的个数=2
五、运算符

1.基本语法:

"$((运算式))""$[运算式]"expr 运算式

# 计算(2+3)* 4 的值
RES1=$(((2+3)*4))
echo "res1=$RES1"
RES2=$[(2+3)*4]
echo "res2=$RES2"

输出结果:

res1=20

res2=20

2.注意事项:

​ (1)使用expr 运算式 中 运算式中的 运算符号要与其他元素之间有空个

​ (2) 该语法需要反引号 `` 包起来

​ (3)使用expr 运算式 中 乘、除、取余分别为 \* / %

列如:

TEMP=`expr 2 + 3`
RES3=`expr $TEMP \* 4`
echo "res3=$RES3"

输出结果:

res3=20

3.参数运算:

# 求出命令行两个参数[整数]的和
SUM=$[$1+$2]
echo "sum = $SUM"
六、条件判断

1) = 字符串比较

2) 两个整数比较

-It 小于

-Ie 小于等于

-eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

3)按照文件权限判断

-r 有读权限

-w 有写权限

-x 有可执行权限

4)按照文件类型判断

-f 按照文件类型进行判断

-e 文件存在

-d 文件存在并且是一个目录

**注意事项:**中括号中语句需要空格:if [ 判断语句 ] ,结尾要用 fi 结尾。

案例:

#!/bin/bash
#判断1 使用 = (等于)
if [ "1" = "1" ]
then
        echo "equal"
fi

#判断2 使用  -ge (大于)
if [ 23 -ge 22 ]
then
        echo "大于"
fi

#判断3 使用 -f (判断目录文件是否存在)
if [ -f /opt/shcode/hello.sh ]
then
        echo "存在"
fi

结果:

[root@0003 shcode]# sh ifdemo.sh 
equal
大于
存在

**附加:**如果if的中括号有内容则返回为真

#!/bin/bash
#判断1 使用 = (等于)
if [ aoeiwu ]
then
        echo "true"
fi

结果为 : true

七、单分支多分支

基本语法

#单分支

if [ 条件判断 ]

then

代码

fi


#多分支

if [ 条件判断 ]

then

代码

elif [ 条件判断 ]

then

代码

fi

案例:

#!/bin/bash
# 案例成绩及格判断
if [ $1 -ge 60 ]
then
        echo "及格了"
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi

八、case语句

基本语法:

case 参数或变量 in
"值1")
语句1
;;
"值2")
语句2
;;
*) 			#其它
语句3
;;
esac		#结束语句
九、for语句

基本语法1

for 变量 in "参数"或值
do
        语句
done

案例:

#$* 是把输入的参数当做一个整体,所以只会输出一句话
for i in "$*"
do
        echo "num is $i"
done
echo "============================================="
#$@ 是把输入的参当做不同的整体,所以会分开输出
for j in "$@"
do
        echo "num is $j"
done

输出结果

[root@0003 shcode]# sh testFor1.sh 100 200 300 400 500
num is 100 200 300 400 500
=============================================
num is 100
num is 200
num is 300
num is 400
num is 500

基本语法2

for(( i=整数; i<=整数; i++ )) #注意:括号中语句注意与括号隔开一个空格
do
        语句
done

案例:

#输出0 从加1 一直到 加100 的和
SUM=0
for(( i=1; i<=100; i++ ))
do
        SUM=$[$SUM+$i]
done
echo "$SUM"

结果:

[root@0003 shcode]# ./testFor2.sh
5050
十、while语句

基本语法:

while [ 条件语句 ] #条件语句与中括号间要有一个空格
do
        执行语句
done

案例:

# 输入一个参数,统计从1+...一直加到该参数的和是多少
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo "结果=$SUM"

结果:

[root@0003 shcode]# ./testWhile.sh 2
结果=3
十一、read读取控制台输入

基本语法:

read -p "输出内容" 变量              #控制台输入的内容会传递赋予这个变量(不输出不结束)

read -t 等待秒数 -p "输出内容" 变量    #等待秒数过了之后或者控制台输入过了结束脚本执行

案例:

#读取控制台输入的NUM1的值
read -p "输入一个数NUM1=" NUM1
echo "你的输入为 $NUM1"
#读取控制台输入的NUM值,在10秒内输入
read -t 10 -p "请在10秒内输入一个数" NUM
echo "你输入的数为 $NUM"

结果:

[root@0003 shcode]# ./testRead.sh 
输入一个数NUM1=100
你的输入为 100
请在10秒内输入一个数120
你输入的数为 120
十二、系统函数

格式:basename [pathname] [suffix]

1.basename [string] [suffix]

(1)显示文件全名:

[root@0003 shcode]# basename /opt/shcode/hello.sh
hello.sh

(2)只显示文件名:

[root@0003 shcode]# basename /opt/shcode/hello.sh .sh
hello
十三、自定义函数

基本语法:

[function] funname[()]
{
	Action;
	[return 返回值;] #有返回值需return,没有返回值不写return
}

案例:

#  计算输入两个参数的和(动态获取),getSum
#定义函数getSum
function getSum(){
        SUM=$[$n1+$n2]
        echo "和是=$SUM"
}

#输入两个值
read -p "请输入第一个数" n1
read -p "请输入第二个数" n2

#调用定义函数
getSum $n1 $n2

结果:

[root@0003 shcode]# ./testFun.sh 
请输入第一个数100
请输入第二个数120
和是=220

你可能感兴趣的:(linux,linux,bash,运维)