shell脚本学习笔记(一)

OK,今天我终于来学脚本啦,之前都是半途而废了,现在希望能够坚持记笔记学下去哈哈哈~
好的,废话不多说,我开始啦!

一、关于shell

shell是壳的意思,顾名思义是套的操作系统外面的壳,由于不能直接操作内核,用shell来调用操作系统完成一些命令。
新建文件用.sh结尾

vim helloworld.sh
#! /bin/bash
echo 'hello world'

【第一行】固定套路,表示这是一个脚本文件
【第二行】输出一个字符串
赋予这个文件执行权限

chmod ug+x helloworld.sh
  1. 当这个文件有执行权限,就可以使用绝对路径或者./helloworld来执行脚本。

执行流程bash ->./sh->脚本中的命令

当然,如果没有执行权限可以

  1. sh helloworld.sh

bash-> sh helloworld.sh->脚本中的命令

  1. source helloworld.sh

执行流程bash->脚本中的命令

由于前两种方法新开了一个进程来执行命令,所以两个进程间的变量可能不能共享,导致脚本中没有办法访问bash进程中的变量。
所以这时候需要export 。也就是说在bash中定义变量是用export age = 18

export的作用是首先从当前进程查询变量,如果当前进程没有,默认去父进程查询变量。也就是说如果用export,这个变量对子进程是可见的,不加的话变量对子进程是不可见的。

二、shell语法

当你学会一门语言,其他语言就简单了。

变量:标识符、数据类型
运算符:让多个变量产生关系。算术、关系、逻辑、位、三目
逻辑语句:顺序、分支、循环
方法/函数:将实现某一功能的代码封装到一起
世界观:构建一个语言的世界观。万物皆对象???
应用:多线程、网络
框架:web服务
中间件/组件:缓存、负载均衡

##shell变量

  1. 命名:字母数字下划线,不能数字开头
  2. 类型
    • 局部变量
    • 环境变量
    • shell变量
      只读变量也不能删除,是弱类型语言

shell字符串

  • 不使用引号
str1=zhangsan
echo $str1
  • 使用双引号
str2="zhang san"
echo $str2
  • 拼接字符串
str3="$str2 444"
echo $str3

输出:zhang san 444

str4='$str2 444'
echo $str4

输出:$str2 444

双引号中的变量取变量值,单引号中的变量会原样输出

输出字符串的长度

echo ${#str4}

输出的是str4的长度:9
截取字符串

echo ${str1:2:3}

输出:ang
表示从下边为2的往后截取3个字符

shell数组

支持一维数组,不支持多维数组。从0开始编号。
定义数组
使用花括号,用空格分隔。
读取数组元素
使用数组名[下标]
使用@可以读取所有元素

favs={"red" "blue" "yellow" "orange"}
fav=${favs[1]}
echo ${fav[@]}
length1=${#favs[@]}
length2=${#favs[*]}

shell注释

单行注释:使用#
多行注释:
:<<EOF
内容
EOF
:<<!
内容

shell运算符

算术运算符

a=10
b=20
val1 = `expr $a+$b`
val2 = `expr $a-$b`
val3 = `expr $a \* $b`
val4 = `expr $a / $b`
if [$a ==$b]
then
	echo "a等于b"
fi
if [$a !=$b]
then 
	echo "a不等于b"
fi

关系运算符
只支持数字,不支持字符串,除非字符串的值是数字

#! /bin/bash
a=10
b=20
if [$a -eq $b]
then
	echo "a=b"
else
	echo "a!=b"
fi
if [$a -ne $b]
then 
	echo "a!=b"
else
	echo "a=b"
fi
 #$a -gt $b a>b
 #$a -lt $b a<b
 #$a -ge $b a>=b
 #$a -le $b a<=b

布尔运算符

if [$a !=$b]
then 
	echo "$a !=$b"
fi
if [$a -lt 100 -a  $b -gt 15]
then
	echo "$a小于100且 $b 大于15"
fi
if [$a -lt 100 -o  $b -gt 15]
then
	echo "$a小于100或 $b 大于15"
fi

逻辑运算符

if [[$a -lt 100 &&  $b -gt 100]]
then 
	echo "返回true"
else
	echo "返回false"
fi
if [[$a -lt 100 ||  $b -gt 100]]
then 
	echo "返回true"
else
	echo "返回false"
fi

字符串运算符

if [$a = $b]
if [$a !=$b]
if [-z $a ] #字符串长度为0
if [-n $a] #字符串长度不为0
if [ $a ] 字符串不为空

文件测试运算符

if [ -r $file] #文件可读
if [-w $file] # 文件可写
if [-x $file] #文件可执行
if [-f $file] #是不是一个文件
if [-d $file] #是不是个目录
if [-s $file] #文件不为空
if [-e $file] #文件存在

好啦~今天就先学到这里啦!知识点都挺简单的,就是太零碎了,需要多去运用。欢迎大家有问题留言讨论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

神仙诙谐代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值