shell学习

一, Shell概述

脚本格式
脚本以#!/bin/bash开头(指定解析器)

二,变量定义

1,常用系统变量
$HOME$PWD$SHELL$USER等(都是大写)
echo $HOME
2,自定义变量
(1)定义变量:变量=值(等号两边不能留有空格)
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
(4)输出变量:echo $变量
3,变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。

root@ubuntu:~/scripts# D="A B C"
root@ubuntu:~/scripts# echo $D
A B C
root@ubuntu:~/scripts# echo $[a=5]
5

(5)可把变量提升为全局环境变量,可供其他Shell程序使用 export 变量名。
4,特殊变量
①$n 描述:n为数字,$0代表脚本名称,10以内参数用$1-$9 表示,10以上的需要用大括号包含, $ {10}

#!/bin/bash
echo "$0 $1 $2 $3"

② $# (功能描述:获取所有输入参数个数,常用于循环)
③ $*(描述:代表命令行中所有的参数,把所有参数看成一个整体)
$@(描述:也代表命令行中所有的参数,不过把每个参数区分对待)
④ $? 描述:最后一次执行命令的状态,0:正确执行)

运算符

1,$((运算式)) 或 $[运算式]
2,expr +,-,*,/,% 加减乘除取余(expr运算符间要有空格)

# 计算5*2
root@ubuntu:~/scripts# echo $[5*2]
10
#赋值法
root@ubuntu:~/scripts# a=$[5*2]
root@ubuntu:~/scripts# echo $a
10
# 计算(2+3)*4
root@ubuntu:~/scripts# echo $[(2+3)*4]
20

条件判断

常用判断条件
在这里插入图片描述
文件权限判断

  • -r 有读的权限
  • -w 有写的权限
  • -x 有执行的权限

文件类型判断

  • -f 文件存在并且是一个常规文件
  • -e 文件存在
  • -d 文件存在病是一个目录

cat:显示文件内容
bash:执行文件内容

# 判断a是否b不等于h
root@ubuntu:~/scripts# [ $a != h ]
root@ubuntu:~/scripts# echo $?
0
# 判断hzy.sh是否有写入权限
root@ubuntu:~/scripts# [ -w hzy.sh ]
root@ubuntu:~/scripts# echo $?
# 判断目录中文件是否存在
root@ubuntu:~/scripts# [ -e ./hzy.sh ]
root@ubuntu:~/scripts# echo $?
0

多条件判断
$$(表示前一条命令执行成功时,才执行一条命令)
||(表示上一条命令执行失败时,才执行下一条命令)

流程控制
1,IF判断

root@ubuntu:~/scripts#cat if.sh
#!/bin/bash
if [ $1 -eq 1 ]
then
	echo "hzy"
elif [ $1 -eq 2 ]
then
	echo "hky"
fi
root@ubuntu:~/scripts#bash if.sh 2
hky

2,case语句

root@ubuntu:~/scripts#cat case.sh
#!/bin/bash
case $1 in
1)
	echo "班长"
;;
2)
	echo "学习委员"
;;
3)
	echo "体育委员"
;;
esac
root@ubuntu:~/scripts#bash case.sh 2
学习委员

3,for循环
语法1

root@ubuntu:~/scripts#cat for.sh
#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
	s=$[$s+$i]	
done
echo $s
root@ubuntu:~/scripts#bash for.sh
5050

语法2

root@ubuntu:~/scripts#cat for2.sh
#!/bin/bash
for i in $*
do
	echo $i
done
root@ubuntu:~/scripts#bash for2.sh 1 2
1
2

4,while循环

root@ubuntu:~/scripts#cat while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
	s=$[$s + $i]
	i=$[$i + 1]
done
echo $s

root@ubuntu:~/scripts#bash while.sh
5050

5,read读取控制台输入

  • -p 指定读取值时的提示符
  • -t 指定读取值时等待的时间(秒)
# 提示7秒内,读取控制台输入的名称
root@ubuntu:~/scripts#cat read.sh
#!/bin/bash
read -t 7 -p "在7s内请输入你的名字" NAME
echo $NAME
root@ubuntu:~/scripts#bash read.sh
在7s

函数

1,系统函数
①basename基本语法
basename [string / pathname] [suffix] #(功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

root@ubuntu:~/scripts# basename ./hzy.sh
hzy.sh

②dirname基本语法
dirname 文件绝对路径 #(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

root@ubuntu:~/scripts# dirname scripts/hzy.sh
scripts

2,自定义函数
①基本语法

[ function ] funname[()]
{
	Action;
	[return int;]
}
funname

②经验技巧
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

#执行

root@ubuntu:~/scripts# vim hzy.sh
root@ubuntu:~/scripts# ./hzy.sh
Please input the number1: 2
Please input the number2: 2
4

综合案例-归档文件
在这里插入图片描述
在这里插入图片描述

root@ubuntu:~/scripts# chmod u+x daily.sh
root@ubuntu:~/scripts# ./daily.sh

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值