2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > engineer1

engineer1

时间:2019-10-10 16:32:23

相关推荐

engineer1

Shell脚本

• 脚本: 可以执行文件,实现某种功能

• 提前设计可执行语句,用来完成特定任务的文件(命令的堆积)

规范Shell脚本的一般组成

• #! 环境声明(Sha-Bang) 以下所有代码,用那个程序解释

• # 注释文本

• 可执行代码

[root@server0 ~]# cat /root/hello.sh

#!/bin/bash

echo hello world

hostname

uname -r

ifconfig | head -2 | tail -1

cat /etc/redhat-release

[root@server0 ~]# /root/hello.sh

####################################################

重定向输出

: 只收集正确信息的重定向

2>: 只收集错误信息的重定向

&>: 收集正确与错误信息的重定向

[root@server0 ~]# echo 123 > /opt/1.txt

[root@server0 ~]# cat /opt/1.txt

[root@server0 ~]# cat /etc

[root@server0 ~]# cat /opt/1.txt /etc/

[root@server0 ~]# cat /opt/1.txt /etc/ > /mnt/a.txt

[root@server0 ~]# cat /mnt/a.txt

[root@server0 ~]# cat /opt/1.txt /etc/ 2> /mnt/a.txt

[root@server0 ~]# cat /mnt/a.txt

[root@server0 ~]# cat /opt/1.txt /etc/ &> /mnt/a.txt

[root@server0 ~]# cat /mnt/a.txt

运算:

[root@server0 ~]# echo 1+2 | bc

[root@server0 ~]# echo 2*3 | bc

[root@server0 ~]# echo 4/2 | bc

[root@server0 ~]# echo 10%3 | bc #取余数运算

$( ):将命令的输出结果,作为参数

[root@server0 ~]# rm -rf /opt/*

[root@server0 ~]# cd /opt/

[root@server0 opt]# date

[root@server0 opt]# date +%F #输出年月日

[root@server0 opt]# mkdir $(date +%F)

[root@server0 opt]# ls

[root@server0 opt]# mkdir mydir-$(date +%F)

[root@server0 opt]# ls

[root@server0 opt]# mkdir $(hostname)-$(date +%F)

[root@server0 opt]# ls

''(单引号):取消特殊字符的意义

[root@server0 /]# echo '* >'

[root@server0 /]# echo '* > ? {} [] ~'

#####################################################

/dev/null:黑洞设备

变量:为了增加脚本适用环境的能力,以及方便适用变量作用:以不变的名称,存储变化的值(容器)

read 产生交互:为了降低脚本的使用难度

[root@server0 /]# cat /root/user.sh

#!/bin/bash

read -p '请输入您要创建的用户名:' user

useradd $user &> /dev/null

echo $user用户创建成功

echo 123 | passwd --stdin $user &> /dev/null

echo $user用户密码设置成功

[root@server0 /]# /root/user.sh

#!/bin/bash

read -p '请输入您要创建的用户名:' user

read -p '请输入您要设置的密码:' pass

useradd $user &> /dev/null

echo $user用户创建成功

echo $pass | passwd --stdin $user &> /dev/null

echo $user用户密码设置成功

#################################################

变量的定义

• 以不变的名称存放的可能会变化的值

– 变量名=变量值

– 方便以固定名称重复使用某个值

– 提高对任务需求、运行环境变化的适应能力

• 设置变量时的注意事项

– 若指定的变量名已存在,相当于为此变量重新赋值

– 等号两边不要有空格

– 变量名由字母/数字/下划线组成,区分大小写

– 变量名不能以数字开头,不要使用关键字和特殊字符

• 基本格式

– 引用变量值:$变量名

– 查看变量值:echo $变量名、echo ${变量名}

[root@server0 /]# a=rhel

[root@server0 /]# echo $a

[root@server0 /]# echo ${a}

[root@server0 /]# echo $a7

[root@server0 /]# echo ${a}7

环境变量

• 常见的环境变量

– USER(当前登陆的用户)

– RANDOM(储存一个随机数)

位置变量

• 在执行脚本时提供的命令行参数

– 表示为 $n,n为序号

– $1、$2、.. .. ${10}、${11}、.. ..

[root@server0 /]# vim /root/2.sh

#!/bin/bash

echo $1

echo $2

echo $3

[root@server0 /]# /root/2.sh hello tom harry

[root@server0 /]# vim /root/3.sh

#!/bin/bash

cat -n $1 | head -$2

[root@server0 /]# /root/3.sh /etc/passwd 3

预定义变量

$# 已加载的位置变量的个数

$* 所有位置变量的值

$? 程序退出后的状态值,0表示正常,其他值异常

[root@server0 ~]# cat /root/3.sh

#!/bin/bash

echo $1

echo $2

echo $#

echo $*

[root@server0 ~]# /root/3.sh haha xixi hehe lele

######################################################

常用的测试选项

• 检查文件状态

-e:存在为真

-d:存在且为目录才为真

-f:存在且为文件才为真

-r:存在且具备读取权限才为真

-w:存在且具备写入权限才为真

-x:存在且具备执行权限才为真

• 比较整数大小(带e字母的都有“等于”二字)

-gt:大于

-ge:大于等于

-eq:等于

-ne:不等于

-lt:小于

-le:小于等于

• 字符串比对

==:相等为真

!=:不相等为真

####################################################

if双分支处理

if [条件];then

命令序列xx

else

命令序列yy

fi

请书写脚本:

用户输入一个用户名,判断用户是否存在

如果存在 输出用户/etc/passwd相应一行

如果不存在 则创建该用户

[root@server0 ~]# vim /root/6.sh

read -p '请输入一个用户名:' userid $user &> /dev/nullif [ $? -eq 0 ];thengrep $user /etc/passwdelseuseradd $userecho $user 创建成功fi

[root@server0 ~]# /root/6.sh

请书写脚本:计算机随机产生一个10以内的随机数用户随机输入一个10以内的随机数如果相等,则中奖了如果不相等,则谢谢回顾

[root@server0 ~]# vim /root/7.sh

#!/bin/bash

read -p '请输入一个10以内的随机数字:' num1

num2=$(echo $RANDOM % 10 | bc)

if [ $num1 -eq $num2 ];then

echo 恭喜您,中奖了

else

echo 恭喜您,谢谢回顾

echo 正确数字为$num2

fi

[root@server0 ~]# /root/7.sh

if多分支处理

if [条件1] ; then

命令序列xx

elif [条件2] ; then

命令序列yy

elif [条件3] ; then

命令序列aa

else

命令序列zz

fi

请书写脚本:请用户输入积分.如果用户的积分大于等于90,输出 vip plus如果用户的积分大于等于80,输出 vip如果用户的积分大于等于70,输出 老司机如果用户的积分大于等于60,输出 新手以上均不满足,输出 仍需努力

[root@server0 ~]# vim /root/8.sh

#!/bin/bash

read -p '请用户输入积分:' num

if [ $num -ge 90 ];then

echo VIP PLUS

elif [ $num -ge 80 ];then

echo VIP

elif [ $num -ge 70 ];then

echo 老司机

elif [ $num -ge 60 ];then

echo 新手

else

echo 仍需努力

fi

##################################################

案例4:编写一个判断脚本

在 server0 上创建 /root/foo.sh 脚本

1)当运行/root/foo.sh redhat,输出为fedora

2)当运行/root/foo.sh fedora,输出为redhat

3)当没有任何参数或者参数不是 redhat 或者

fedora时,其错误输出产生以下信息:

/root/foo.sh redhat|fedora

[root@server0 ~]# vim /root/foo.sh

#!/bin/bash

if [ $# -eq 0 ];then

echo '/root/foo.sh redhat|fedora' >&2

exit 2

elif [ $1 == redhat ];then

echo fedora

elif [ $1 == fedora ];then

echo redhat

else

echo '/root/foo.sh redhat|fedora' >&2

exit 3

fi

[root@server0 ~]# /root/foo.sh

[root@server0 ~]# echo $?

[root@server0 ~]# /root/foo.sh 2> /opt/2.txt

[root@server0 ~]# cat /opt/2.txt

##################################################

for循环结构

循环作用:让计算机,反复执行重复性的操作

for 变量 in 值列表do执行的动作done

[root@server0 ~]# vim /root/10.sh

#!/bin/bash

for user in kenji natasha tom harry jack

do

useradd $user

echo $user 成功

done

[root@server0 ~]# /root/10.sh

#######################################################

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
扩展阅读