linux的脚本基础,shell脚本基础(示例代码)

shell脚本基础

一、shell脚本编写步骤

1)使用vim编辑器编写shell脚本

2)添加shell脚本的执行权限

3)执行shell脚本

二、重写向与管道符

1、输出重定向

:将命令结果输出到指定的文件中

ps –aux >process.txt

:将命令结果追加输出到指定文件中

ps –aux >>process.txt

2、输入重定向

3、错误重定向

2>:将命令的错误信息输出到指定的文件中

2>>:将命令的错误信息追加输出到指定的文件中

tar czf etc.tar.gz /etc/ 2>error.log

若希望将命令的正常输出信息及错误输出信息同时输出到指定的文件中,可以使用&>重定向操作

tar czf etc.tar.gz &>infor.log

三、管道符操作

df –hT | grep “/$” | awk ‘{print $1,$6}’

|:代表Linux中的管道符,先执行管道符前面的命令,将命令的结果作为后一个命令的参数再继续执行

awk命令:

awk命令可以将输出的内容以某个字符(例如空格、制表符、冒号、分号等)为分隔,然后输出某几段的内容

awk –F: ‘{print $1,$6}’:以冒号:分隔一行的内容,输出第1、6段的内容

awk ‘{print $1,$3}’:默认以空格或者制表符分隔内容,输出第1,3段的内容

四、shell变量

1、自定义变量

定义变量product,并输出变量的内容

product=car

echo $product

定义变量product,输出变量与1.8T连接输出

product=car

echo ${product}1.8T

?变量的赋值

1)使用双引号” ”将包括空格的变量值赋予变量

car=”car 1.8T”

2)使用单引号’ ’将特殊字符(%,$,#,@)包括

3)变量值中如果有单引号,需要使用转义符

4)变量值如果是一个命令的结果,需要使用``反撇号将命令括起来

info=ps aux | grep root

5)如果命令在含有命令的嵌套,需要使用$()将命令括起来

info=rpm –qf $(which useradd)

?read命令

使用read命令可以通过用户的输入为变量赋值

read –p “请指定数据备份的目录:” dir1

?变量的作用范围

1)变量的作用范围默认只限于本shell环境中,如果用户切换到其他的shell环境使用变量值时,变量的值为空

2)使用export可以将变量的作用范围设置为全局

export name=”www.baidu.com”

?变量运算符

expr 变量1 运算符 变量2 运算符 变量3

运算符:

1)+:加法运算 expr $x + $y

2)-:减法运算 expr $x - $y

3)*:乘法运算 expr $x /* $y

4)/:除法运算

5)%:取两个数字的余数

6)变量与运算符之间必须用空格隔开

2、环境变量

环境变量是随着Linux系统的安装自动产生的变量,该类变量的值会随着用户的操作环境变化而变化

使用env命令可以显示系统中存在的环境变量

1)USER:代表用户名

2)HOME:代表用户的宿主目录

3)HOSTNAME:代表计算机名

4)LANG:代表系统使用的语言

5)PATH:代表用户可以执行哪些目录下的命令

6)PWD:代表当前目录的位置

7)SHELL:代表用户当前所使用的shell

4、位置变量(占位符)

Linux shell脚本中,使用$1,$2……$9代表占用符

例如编写以下脚本:

vim service.sh

/bin/bash

/etc/init.d/$1 restart

用户在执行上面脚本时./service.sh network结果就是重启network服务

5、特殊变量

1)$#:代表某个命令的参数的个数

2)$*:代表某个命令的详细参数信息

3)$?:代表前一个命令的执行结果。结果为0代表命令正常执行

4)$0:代表当前执行的脚本或者命令的名称

简单shell脚本举例

显示系统中的进程数,显示当前登录系统的用户数及根文件系统的使用率

vim count.sh

/bin/bash

process_num=ps aux | wc –l

account_num=who | wc –l

use_percent=df –hT | grep “/$” | awk ‘{print $6}’

echo “系统中的运行数为: $process_num”

echo “登录系统的用户数: $account_num”

echo “根分区的使用率为: $use_percent”

五、条件测试

语法: [ 条件表达式 ]

条件表达式与方括号中间要用空格隔开,通过$?返回测试的结果,返回0代表测试通过,非0代表测试失败

1、文件测试

1)[ -e 目录或者文件位置 ]:判断文件或者目录是否存在

2)[ -d 目录或者文件位置 ]:判断是否为一个目录

3)[ -f 目录或者文件位置 ]:判断是否为一个文件

4)[ -r 目录或者文件位置 ]:判断当前用户是否有读取权限

5)[ -w 目录或者文件位置 ]:判断当前用户是否有修改权限

6)[ -x 目录或者文件位置 ]:判断当前用户是否有执行权限

2、整数值比较

1)[ number1 –eq number2]:判断两个数字是否相同

2)[ number1 –ne number2]:判断两个数字是否不同

3)[ number1 –lt number2]:判断第1个数字是否小于第2个数字

4)[ number1 –gt number2]:判断第1个数字是否大于第2个数字

5)[ number1 –le number2]:判断第1个数字是否小于等于第2个数字

6)[ number1 –ge number2]:判断第1个数字是否大于等于第2个数字

3、字符串比较

1)[ 字符串1 = 字符串2 ]:判断两个字符串是否相同

2)[ 字符串1 != 字符串2 ]:判断两个字符串是否不同

3)[-z 字符串 ]:判断字符串是否为空

4、逻辑判断

[ 条件1 && 条件2 ]:两个条件都成立时,返回0

[ 条件1 || 条件2 ]:两个条件有一个为0时,返回0

[ !条件 ]:当条件不成立时,返回0

六、if选择分支结构

1)语法1

if [ 条件测试操作 ]

then

条件完成执行的操作

else

条件未完成执行的操作

fi

2)语法2

if [ 条件测试操作1 ]

then

条件1完成执行的操作

elif [ 条件测试操作2 ]

then

条件2完成执行的操作

else

以上条件都未完成执行的操作

fi

if分支举例:

监控系统的CPU、内存、根分区使用率,如果CPU使用率大于80%,内存使用率大于90%,根分区使用率大于90%,分别显示相应的告警信息

!/bin/bash

获取根分区磁盘使用率

disk_usage_root=df -h | grep "/$" | awk ‘{print $5}‘ | awk -F% ‘{print $1}‘

获取CPU使用率

cpu_idle=mpstat | tail -1 | awk ‘{print $11}‘ | awk -F. ‘{print $1}‘

cpu_usage=expr 100 - $cpu_idle

获取内存使用率

mem_used=free | grep "cache:" | awk ‘{print $3}‘

mem_total=free | grep "Mem:" | awk ‘{print $2}‘

mem_usage=expr $mem_used * 100 / $mem_total

if [ $disk_usage_root -ge 90 ]

then

echo "你的磁盘使用率已经高于90%,目前你的磁盘使用率是:${disk_usage_root}%"

elif [ $cpu_usage -ge 80 ]

then

echo "你的CPU使用率已经高于80%,目前你的CPU使用率是:${cpu_usage}%"

elif [ $mem_usage -ge 90 ]

then

echo "你的内存使用率已经高于90%,目前你的内存率是:${mem_usage}%"

fi

七、for循环结构

语法:

for 变量名 in 变量取值列表

do

执行的操作

done

根据用户列表文件中的内容,实现批量建立用户,用户的初始密码为123456

!/bin/bash

userName=cat /shell/user.list

for user in $userName

do

useradd $user

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

done

八、while循环结构

语法:

while [ 条件测试操作 ]

do

执行的操作

条件变化

done

在while循环中,有两个特殊的条件分别是true和false;当条件指定为true时,会无限循环,直到遇到exit语句才会跳出结束脚本;条件指定为false时,循环不会执行

随机生成商品价格,用户猜测商品价格

!/bin/bash

price=expr $RANDOM % 1000

times=0;

echo "商品实际价格范围为0-999,猜猜看是多少:"

while true

do

read -p "请输入你猜测的价格:" int

let times++

if [ $int -eq $price ]

then

echo "恭喜你答对了,实际价格是:$price"

echo "你总共猜了${times}次"

exit 0

elif [ $int -gt $price ]

then

echo "太高了"

else

echo "太低了"

fi

done

九、case选择结构

语法:

case 变量 in

取值1)

执行的操作

;;

取值2)

执行的操作

;;

*)

默认执行的操作

*):代表case默认执行的操作

;;:表示中断一个case的操作

使用case编写启动、停止、重启服务的脚本

!/bin/bash

case "$1" in

start)

echo -n "正在启动sleep服务…"

sleep 7200 &

if [ $? -eq 0 ]

then

echo "OK"

fi

;;

stop)

echo -n "正在停止sleep服务…"

pkill "sleep" &>/dev/null

echo "OK"

;;

status)

pgrep "sleep" &>/dev/null

if [ $? -eq 0 ]

then

echo "sleep服务已经启动"

else

echo "sleep服务已经停止"

fi

;;

restart)

$0 stop

$0 start

;;

*)

echo "用法: $0(start|stop|status|restart)"

esac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值