shell脚本笔记

注释内容:
单行注释:

除了首行的#不是注释外,其他所有行内容,只要首个字符是#,那么就表示该行是注释

多行注释:
    多行注释有两种方法::<<! … ! 和 :<<字符 … 字符

#!/bin/bash  指定bash的解释器
echo '1'
<<! echo '2'
echo '3'
echo '4'
!
echo '5'

shell执行的方式:

bash 脚本名
source 脚本名 shell脚本内容环境和当前用户环境一致

总结:source或者.点号执行方式不会开启子进程,能共享当前终端定义的变量,其他执行方式会开启子进程

变量定义

变量名=变量值

shell 中的变量分为三大类

本地变量、全局变量、shell内置变量


本地变量

变量名=变量值 / 变量名=‘变量值’ / 变量名=“变量值” / 这个可以在变量值中添加变量 data=n
a=“123 $data 321” --> 123 n 321

命令变量

变量名=命令 或者 变量名= ( 命 令 ) 例 子 : ‘ d a t a = ‘ l s ‘ d a t a = (命令) 例子: `data=`ls` data= ():data=lsdata=(ls)`

全局变量

expote 变量 或者 export 变量名=值 通过 env 命令参看所有全局变量

总结:在终端中定义全局变量时,只对当前shell环境及子shell环境有效,对新开的终端无效,当前终端关闭后,它定义的全局变量消失。

取消变量:

unset 变量名

shell内置变量

$0 获取当前执行的shell脚本文件名
$$ 获取执行shell脚本的进程号
$n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大括号括起来${10}
$# 获取当前shell命令行中参数的总个数
$? 获取执行上一个指令的返回值(0为成功,非0为失败)

字符串相关:

${变量名:起始位置:截取长度} 起始位置0

默认值相关:

${变量名:-默认值} ${变量名+默认值}

测试语句两种形式:

test 条件表达式 [ 条件表达式 ] 注: [ ]与内部的条件表达式之间需要有空格

test跟 [ ] 都是用于测试条件表达式是否成立,条件成立,状态返回值是0,条件不成立,状态返回值是1

逻辑表达式 逻辑表达式一般用于判断多个条件之间的依赖关系。 常见的逻辑表达式有:

&& [ 1 = 1 ] && echo “条件成立” 条件成立
|| [ 1 = 2 ] || echo “条件不成立” 条件不成立

文件表达式
-f 判断输入内容是否是一个文件
示例:

[ -f weizhi.sh ] && echo "是一个文件"
		是一个文件
		[ -f weizhi.sddh ] || echo "不是一个文件"
		不是一个文件

-d 判断输入内容是否是一个目录
示例:

[ -d weizhi.sddh ] || echo "不是一个目录"
	不是一个目录
	mkdir nihao
	[ -d nihao ] && echo "是一个目录"
	是一个目录

-x 判断输入内容是否可执行
示例:

[ -x age.sh ] || echo "文件没有执行权限"
	文件没有执行权限
	[ -x test.sh ] && echo "文件有执行权限"
	文件有执行权限

数值操作符

n1 -eq n2 相等
n1 -gt n2 大于
n1 -gte n2 大于
n1 -lt n2 小于
n1 -lte n2 小于
n1 -ne n2 不等于

字符串比较

== 内容一致
!= 内容不一致

计算表达式

$(( 计算表达式 ))
root@ubuntu:~# n=100
root@ubuntu:~# echo $(($n/5))
20

let 计算表达式

root@ubuntu:~# i=1
root@ubuntu:~# let i=i+7
root@ubuntu:~# echo $i
8

简单流程控制语句
单分支if语句

if [ 条件 ]
then
指令
fi

#例子:
#!/bin/bash
#单if语句的使用场景
if [ "$1" == "nan" ]

then
   echo "您的性别是 男"
fi

双分支if语句

if [ 条件 ]
then
指令1
else
指令2
fi

#例子
#!/bin/bash
#单if语句的使用场景
if [ "$1" == "nan" ]
then
   echo "您的性别是 男"
else
   echo "您的性别是 女"
fi

多分支if语句

if [ 条件 ]
then
指令1
elif [ 条件2 ]
then
指令2
else
指令3
fi

case选择语句 和if语句一样 代码看起来更加整洁

case  变量名 in
	值1)
		 指令1
		 ;;
    .....
   指n)
		 指令n
			;;
esac

#例子:
#cat case.sh
#!/bin/bash
#case语句使用场景
case "$1" in                 
    "start")                 
        echo "服务启动中..."                  
        ;;                  
    "stop")                 
        echo "服务关闭中..."                  
        ;;                          
    "restart")                   
        echo "服务重启中..."             
        ;;                  
    *)                 
        echo "$0 脚本的使用方式: $0 [ start | stop | restart ]"      
        ;;                  
esac

for循环语句

for 值 in列表
do
	执行语句
done

#例子:
#!/bin/bash
#for语句的使用示例
for i in $(ls /root)
do
  echo "${i}"
done

while循环语句

while 条件
do
 执行语句
done

#例子:
#!/bin/bash
#while的示例
a=1
while [ "${a}" -lt 5 ]
do
   echo "${a}"
   a=$((a+1))
done

until循环语句

until 条件
do
	执行语句
done

#例子:
#!/bin/bash
#until的示例
a=1
until [ "${a}" -eq 5 ]
do
   echo "${a}"
   a=$((a+1))
done

函数实践
简单函数定义和调用示例

#!/bin/bash
#函数使用场景一:执行频繁的命令
dayin(){
  echo "wo de mingzi shi  111"
}
dayin

函数传参和函数体内调用参数示例

#!/bin/bash
#定义传参数函数
dayin(){
  echo "wode mignzi shi $1"
}
#函数传参
dayin $1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ch3nnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值