shell脚本

shell脚本满足的要素:

1.要有解释器文件的第一行

2.要有注释脚本的功能、作者、邮箱、编写的时间

3.程序语句条件测试、循环语句、判断、函数、数组、变量

shel的脚本文件

文件一般以.sh结尾 .sh没有意义是用来给人看的

文件的一行是解释器#/bin/bash表示使用bash shell来执行下面的代码

注释

#单行注释

<< BLOCK多行注释的内容

​ BLOCK

shell的执行:

1.使用bash shell执行文件可以没有执行权限

在子shell中执行

2.使用相对路径

执行文件必须要有执行权限

在子shelle中执行

3.使用绝对路径执行文件必须要有执行权限

在子shelle中执行

4.使用source

执行文件可以没有执行权限

在当前shell中执行是为了获取得到文件

里面的环境变量,这个变量记录了云平台的登录系统

Shell脚本编写规范

使用.vimrc文件,能够快速的生成开头的注释信息
[root@ scripts]# cat ~/.vimrc
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"##################################################")
call setline(3, "#File Name: ".expand("%"))
call setline(4, "#Version: V1.0")
call setline(5, "#Author: sunrui")
call setline(6, "#Email: 312730265@qq.com")
call setline(7, "#Created Time : ".strftime("%F %T"))
call setline(8, "#Description:")
call setline(9,"#######################################################")
call setline(10, "")
endif
endfunc

位置化参数(就是一类特殊的变量):

$1$2$3

$1表示脚本后的第一个参数

$2表示脚本后的第二个参数

$n表示脚本后的第N个参数

预定义变量

是 Bash 中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
$0 :脚本名
$* :所有的参数,双引号引起来时参数视为单个字符串
$@:所有的参数,双引号引起来时,每个参数作为个体
$# :参数的个数
$$ :当前进程的PID
$? :上一个命令的返回值0表示成功

read

read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名
read命令行中也可以不指定变量 ,如果不指定变量,那么read命令会将接收到的数据放置在环境变
量REPLY中。

exit

程序执行后会携带一个退出码:
(1) 0代表成功,1-255代表失败
(2) Shell程序的退出码储存在系统变量$?中
(3) exit num可以中断程序并设置退出码为num

根据命令返回值可以判断命令是否执行成功值为0时表示命令执行成功,非0时表示命令执行失败

条件执行运算符:

&& 逻辑与 两者同时返回为真则为真

|| 逻辑或 一个为真就为真

用来连接命令

command1 && command2
表示command1执行成功才会执行command2
command1返回值为0则执行command.2
command1返回值为非0则不执行command2
command1 || command2
如果command1返回值为0则command2不执行
如果command1返回值为非0则command2执行
#举例
grep -q no_such_user/etc/passwd || echo'No such user'
No such user

ping -c1 -W2 station1 &> /dev/null \
>  && echo "station1 is up" \
>  || { echo 'station1 is unreachable';exit1;}
station1 is up

复合指令

原则上都是运行一串命令

() 在子shl中执行不需要分号结尾 命令和括号之间不需要有空格

{} 在当前shelle中执行必须使用分号结尾 第一个命令和左边的括号必须要有空格

在括号内的重定向影响括号内的命令,括号外的重定向影响所有的命令

#举例
[root@localhost opt]# (pwd;cd /tmp;pwd)
/opt
/tmp
[root@localhost opt]# { pwd;cd /tmp;pwd;}
/opt
/tmp
#()子shell中执行,执行完毕,当前路径不变

条件测试

在shell程序中,用户可以使用测试语句来测试指定的条件表达式的真或者假。当指定的条件为真时,整个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0值。
格式1: test 条件表达式 进行单个条件测试
格式2: [ 条件表达式 ] 和test一致
格式3: [[ 条件表达式 ]] 条件执行运算符 && ||

操作符说明举例
-b file检测文件是否是块设备文件,如果是,则返回true[ -b $file ] 返回false
-c file检测文件是否是字符设备文件,如果是,则返回true[ -c $file ] 返回false
-d file检测文件是否是目录,如果是,则返回true[ -d $file ] 返回false
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true[ -f $file ] 返回true
-g file检测文件是否设置了SGID位,如果是,则返回true[ -g $file ] 返回false
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true[ k $file ] 返回false
-p file检测文件是否是具名管道,如果是,则返回true[ -p $file ] 返回false
-u file检测文件是否设置了SUID位,如果是,则返回true[ -u $file ] 返回false
-r file检测文件是否可读,如果是,则返回true[ -r $file ] 返回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

布尔运算符

!非运算对条件表达式取反

-o 或运算某一个条件表达式成立则为真 类似 || 逻辑或

-a 与运算条件表达式同时成立则为真 类似 && 逻辑与

运算符说明举例
非运算,表达式为true则返回为false,否则返回为true[ !false ] 返回true
-o或运算,有一个表达式为true则返回true[ $a -lt 20 -o $b -gt 100 ] 返回true
-a与运算,两个表达式都为true才返回true[ $a -lt 20 -a $b -gt 100 ] 返回false

字符串运算符

运算符说明举例
=检测两个字符串是否相等,相等返回true[ $a = $b ] 返回false
!=检测两个字符串是否相等,不相等返回true[ $a != $b ] 返回true

条件判断if语句

单分支结构

第一种语法:

if <条件表达式>
then
	执行语句
fi

第二种语法:

if <条件表达式>;then
	执行语句
fi

双分支结构

if <条件表达式>

then
	条件成立的执行语句
else
	条件不成立的执行语句
fi

多分支结构

if <条件表达式1>

then

	执行语句1

elif <条件表达式2>

then

	执行语句2

elif <条件表达式3>

then

	执行语句3

else

执行最后的执行语句(前面所有条件都不成立)

fi
#举例
#根据用户输入成绩,判断优良中差。
#85-100 优秀--A 70-84 良好--B 60-69 合格--C 60分以下不合格--D
read -p "Please enter your score (0-100): " grade
if [ $grade -ge 85 ]; then
echo "$grade, A"
elif [ $grade -ge 70 ]; then
echo "$grade, B"
elif [ $grade -ge 60 ]; then
echo "$grade, C"
else
echo "$grade, D"
fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值