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

三、Linux——Shell脚本语言

2017-07-11 19:52 399 查看
【1】shell的三种类型

shell 命令
shell 命令解释器
shell 脚本:shell命令的有序集合


【2】创建

1、创建一个以.sh结尾的文件
2、赋予可执行权限
3、执行


【3】chmod

rw-  rw- r--
二进制      110  110 100
八进制      6    6   4
chmod 776 1.sh


【4】变量

1--- 用户自定义变量
1、没有类型
2、赋值时等号两边禁止有空格
3、echo "$A"
2--- 位置变量
$0... ...$n(两位以上要加花括号 ${10})
命令行的位置参数
3--- 预定义变量
$*  $@  :所有命令行参数,除第一个以外
$#         :命令行参数的个数,除第一个以外
$$         :PID
$?         :与上一条shell命令有关
1、承接上一条命令的执行状态  成功$?= 0
2、用于测test语句的结果真$?=0,假$?=1
3、承接函数的返回值
4--- 环境变量
$HOME


【5】功能语句

1--- read从标准输入读入一行,并依次赋值给后面的变量
剩余的数据甩给最后一个变量
2--- expr
+    -   \*    /     %      \(     \)
1、表达式的格式 `expr $A + 1`
2、运算符两边必须留有空格

3--- test
0、测试的结果使用$?承接
1、测字符串
=  :是否等于
!=  :是否不等
-z :是否为空
-n  :是否为非空
2、测整数
-eq     -ne     -gt     -ge       -lt     -le
相等      不等     大于   大于等于    小于     小于等于

3、文件
1>文件类型
linux   b       c     d     -     l      s       p
shell  -b      -c    -d    -f    -L     -S      -p
2>权限
用户本身的权限
-r -w -x
3>其他
-e name       测试一个文件是否存在
-s name    测试name文件是否存在且不为空
f2 -nt f2      测试文件f1 是否比文件f2 更新
f2 -ot f2   测试文件f1 是否比文件f2更旧
4>test 可以用[]替代,注意与数据保留一个空格


【6】if

if      表达式
then
命令表
fi

*******************

if      表达式
then
命令表1
else
命令表2
fi

*******************
if      表达式
then
命令表1
elif    表达式
then
命令表2
else
命令表3
fi


【7】case

case  变量   in
模式1)
命令表1
;;
模式2|3)
命令表2
;;
*)
命令表n
;;
esac


【8】while

while   命令或表达式
do
命令表
done

for   变量名   in   单词表
do
命令表
done


【10】函数

function   function_name ( )
{
command1
……
commandn
}

1、function 是关键字
2、调用:function_name  arg1 arg2 arg3
3、参数:$1 …… $n
4、返回:return $val               //返回值是整数
5、$? 承接函数的返回值
6、变量默认是全局的,local使其变为局部的


【11】

-o  or或
-a  and与

exit    结束程序


源码及注释

1、1_val.sh

#! /bin/bash
#注释
A=hello   #赋值=两边不能有空格

echo "A = $A"   #取值要用$

#命令行参数
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"

echo "\$10 = ${10}"   #两位以上要加花括号

#预定义变量

echo "\$* = $*"   #除第一个参数后面的所有
echo "\$@ = $@"   #同上
echo "\$# = $#"   #除第一个参数的个数

echo "\$$ = $$"   #进程PID
echo "\$? = $?"   #承接上一条命令的执行结果,正确输出0


2、2_read.sh

#! /bin/bash
#read 从标准输入读入一行,并依次赋值给后面的变量
#剩余数据甩给最后一个变量
read A B C
echo "A = $A"
echo "B = $B"
echo "C = $C"

read D E
echo "D = $D"
echo "E = $E"


3、3_expr.sh

#! /bin/bash
#计算表达式 expr格式

A=10

A=`expr $A + 10 \* 2`   #``tab键上方位置 符号两边留有空格需要
echo "A = $A"

read A
A=`expr \( $A + $1 \) \* 2`  #*、()需要转义符号
echo "A = $A"


4、4_test_cha
4000
r.sh

#! /bin/bash

A=hello
B=hello

test $A = $B
echo "\$1 = $?"  #AB是否相等

test $A != $B   #AB是否不等
echo "\$2 = $?"

test $A = "HELLO"
echo "\$3 = $?"

test -n $A       #是否非空
echo "\$4 = $?"

test -z $A       #是否空
echo "\$5 = $?"

C=""
test -z $C
echo "\$6 = $?"


5、5_test_int.sh

#! /bin/bash

A=10
B=12

test $A -eq $B
echo "\$?1 = $?"

test $A -ne $B
echo "\$?2 = $?"

test $A -lt $B
echo "\$?3 = $?"

test $A -gt $B
echo "\$?4 = $?"

test $A -le $B
echo "\$?5 = $?"

test $A -ge $B
echo "\$?6 = $?"


6、6_test_file.c

#! /bin/bash
test -d .
echo "\$?1 = $?"

>8.sh
test -f ./8.sh
echo "\$?2 = $?"

ln -s 8.sh link
test -d link
echo "\$?3 = $?"

test -w 8.sh
echo "\$?4 = $?"

[ -x 8.sh ]
echo "\$?5 = $?"

[ 1.sh -nt 8.sh ]
echo "\$?6 = $?"
rm ./8.sh ./link


7、7_if.sh

#! /bin/bash

read A

if [ $A -gt 100  -o  $A  -lt 0 ]
then
echo "error"
exit
fi

if [ $A -le 100  -a  $A -ge 90 ]
then
echo "A"
fi

if [ $A -le 89  -a  $A -ge 80 ]
then
echo "B"
fi

if [ $A -le 79  -a  $A -ge 70 ]
then
echo "C"
fi

if [ $A -le 69  -a  $A -ge 60 ]
then
echo "D"
fi

if [ $A -le 59  -a  $A -ge 0 ]
then
echo "E"
fi

echo "end"


8、8_elif.sh

#! /bin/bash

read A

if [ $A -eq 0 ]
then
echo "等于0"
elif [ $A -gt 0 ]
then
echo "大于0"
else
echo "小于0"
fi


9、9_case.sh

#! /bin/bash

read A

case $A in
H|h)
echo "hello"
;;
W|w)
echo "world"
;;
O)
echo "other"
;;
*)
echo "**"
;;
esac


10、10_case_sorce.sh

#! /bin/bash

read A

if [ $A -gt 100 -o $A -lt 0 ]
then
exit
fi

A=`expr $A / 10`

case $A in
10|9)
echo "A"
;;
8)
echo "B"
;;
7)
echo "C"
;;
6)
echo "D"
;;
*)
echo "E"
;;
esac


11、11_while.sh

#! /bin/bash

A=6

while [ $A -gt 0 ]
do
A=`expr $A - 1`

if [ $A -eq 2 ]
then
#   break
continue
fi

echo "A = $A"
sleep 1
done

B=10
while [ $B -ne 0 ]
do
>file$B.txt
B=`expr $B - 1`
done


12、12_for_in.sh

#! /bin/bash

i=0

for A in hello world beijing shanghai
do
echo "A = $A"
i=`expr $i + 1`
done

echo "i = $i"


13、13_for_MAX.sh

#! /bin/bash

MAX=$1

for A in $@             //巧用预定义变量
do
if [ $MAX -lt $A ]
then
MAX=$A
fi
done

echo "MAX = $MAX"


14、14_for_cp.sh

#! /bin/bash

#1、创建一个目录dir,存在则提示exist 不存在则创建
#2、将当前路径下所有的普通文件拷贝到dir
#3、将拷贝的文件名记录在1.txt文件内

if [ -d dir ]     #判断文件夹是否存在
then
echo "exist"
else
mkdir dir
fi

for file in `ls`     #巧用命令置换,ls结果当参数
do
if [ -f $file ]
then
cp $file dir
echo "$file" >> 1.txt
fi
done


15、15_fun.sh

#! /bin/bash

function fun()   #声明一个函数
{
local A=8       # A=8 默认全局,local A=8 局部
echo "fun"
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$@ = $@"
echo "\$# = $#"
return $A
}

fun world beijing 123   #传参
echo "\$? = $?"
echo "A = $A"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 脚本语言