Linux shell 编程基础

shell编程用来做什么?

     shell脚本编程一般应用于服务器管理和服务器集群管理。对于python和java程序员来说,shell脚本做服务各种任务、维护等也很频繁。

shell编程细节点

脚本格式要求

1,脚本以#!/bin/bash 开头;2,脚本需要有可执行权限;(chmod 744 myshell.sh)3,shell脚本每行不要有;号结尾;4,shell脚本变量命名=号两边不要有空格;

脚本的常用执行方式

相对路径方式执行:./myshell.sh
绝对路径执行:/root/script/myshell.sh
无需权限直接执行方式(不推荐):sh ./myshell.sh

shell变量

	变量命名可以由字母数字和下划线组成;一般习惯用大写字母、下划线;不支持数字开头;
    系统变量:HOME PWD SHELL USER等等;
	显示当前shell中所有变量:set
	定义变量:变量=值
	撤销变量:unset 变量
	定义静态只读变量: readonly 变量=值
	定义全局变量:1,编辑/etc/profile,增加全局变量 export 变量名=值;2,source /etc/profile 让修改的配置即时生效;
     将命令的返回值赋给变量:1,A=`ls -la`;2,A=$(ls -la)

位置参数

    基本语法:
	$n 功能描述:n为数字,$0代表命令本身,$1 - $9代表第一个到第9个参数;大于等10个的参数用{}括起来:如${10}
	$* 功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
	$@ 功能描述:这个变量代表命令行中所有的参宿,不过$@把每个参数区分对待;
	$# 功能描述:这个变量代表命令行中所有参数的个数;
     敏捷的各种方法论、框架之间可以相互借鉴,scrum一样可以引入XP的实践,精益软件开发也可以使用scrum的活动,没有谁一定比谁优秀,只是scrum在实施学习曲线、转型过渡上都相对平滑,易于获得公司高层和团队的支持,更容易转型成功。

预定义变量

shell设计组已经定义好的变量,可以直接在shell脚本中使用:
$$ 功能描述:当前进程的进程号(PID)
$! 功能描述:后台运行的最后一个进程的进程号(PID)
$? 功能描述:最后一次执行的命令的返回状态。如果这个变脸的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确。

运算符

1, ( ( 运 算 式 ) ) 例 如 : R E S U L T = ((运算式)) 例如:RESULT= (())RESULT=((2+3))
2, [ 运 算 式 ] ( 推 荐 方 式 ) 例 如 : R E S U L T = [运算式] (推荐方式) 例如:RESULT= []()RESULT=[2+3]
3,expr 例如:RESULT=expr 2+3

条件判断语句

基本语法:[ condition ] (注意 condition 前后要有空格);非空返回true,可用使用$!验证(0为true,非0为false)

常用判断条件:
1,两个整数(字符串)= 相等; -lt 小于 ;-le 小于等于;-eq 等于;-gt 大于;-ge 大于等于; -ne 不等于;
2,按照文件权限进行判断:
-r 有读的权限; [ -r 文件 ]; -w 有写的权限; -x 有执行的权限;
3,按照文件类型进行判断:
-f 文件存在并且是一个常规的文件; -e 文件存在; -d 文件存在并是一个目录;
例如:

if [ 23 -gt 22]
then
	echo "大于"
fi

case语句:

case $1 in 
	"1")
	echo "周一"
	;;
	"2")
	echo "周二"
	;;
	*)
	echo "other"
	;;
esac

for循环:

#for循环样例1
for i in "$@"
do
	echo "the num is $i"
done
#for循环样例2
SUM=0
for((i=1;i<=100;i++))
do
	SUM=$[$SUM+$i]
done
echo "SUM=$SUM"

while语句

SUM=0
i=0
while [ $i -le $1]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "SUM= $SUM"

读取控制台输入

基本语法:read(选项)(参数)

选项:-p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待;

参数:指定读取值的变量名;

样例:

#1,读取控制台输入一个num值
read -p "请输入一个数num1=" NUM1
echo "你输入的值是num1=$NUM1"
#2,读取控制台输入一个num值,在10秒内输入
read -t 10 -p "请输入一个数num1=" NUM2
echo "你输入的值是num1=$NUM2"

系统函数

basename 基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]

dirname 基本语法

功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

#!/bin/bash
#将命令的返回值赋给变量
MYFILENAME1=`basename /root/shell/bbb.txt`
#将命令的返回值赋给变量
MYFILENAME2=$(basename /root/shell/bbb.txt .txt)
echo "-----带后缀的文件名-----"
echo "文件名是$MYFILENAME1"
echo "-----不带后缀的文件名-----"
echo "文件名是$MYFILENAME2"
MYDIR=`dirname /root/shell/bbb.txt`
echo "文件目录是$MYDIR"

自定义函数

基本语法

[ function ] funname[()]

{

Action;

[return int;]

}

funname

经验技巧

(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其他语音那样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显式加:return 返回,如果不加,讲最后一条命令运行结果,作为返回值,return 后跟数值n(0-255)

样例:

#/bin/bash

function sum()
{
	s=0
	s=$[$1+$2]
}
read -p "input your first number:" p1
read -t 20 -p "input your second number:" p2
sum $p1 $p2

小结

关于shell脚本编程的上述内容比较简单直接,也比较基础,但在一般的日常维护和管理中比较常用,熟练掌握也一般够用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值