shell

shell


shell是操作 linux的桥梁

变量
创建:
	后缀为.sh的文件
编写:
	头部注释为#!/bin/sh或者#!/bin/bash(注释可写可不写,建议写上)
运行:
	1.通过sh命令执行
		例如:sh helloworld.sh
	2.通过bash命令执行
		例如:bash helloworld.sh
	3.通过把文件修改为可执行的文件然后通过./文件命令.sh来执行	
		例如:./helloworld.sh(必须在当前目录下)


变量(动态数据类型,没有数据类型的限制,并且必须初始化)
定义和初始化
格式
变量名称=值
例如:
x=10 “abc edefg”
注意:
等号两边不能有空格
使用:通过$区分变量还是一句话
格式1:
$变量
格式2:
变量注意 : 格式 1 , 会把 {变量} 注意: 格式1,会把 变量注意:格式1,会把后所有相连内容看做一个变量
格式2,${}表示值引用{}之中的内容分,对相连的内容做了一个区分

#!/bin/bash
x=10
y="as df"
echo ${x}
echo ${y}qwe

0... 0... 0...n:表示接收外部参数(执行脚本时,传递的参数)
格式:
$下标
注意:
$0永远表示脚本名称(所以脚本名称不算数, 0 也不算第一个参数 ) 下标大于一位数只能使用 0也不算第一个参数) 下标大于一位数只能使用 0也不算第一个参数)下标大于一位数只能使用{}获取参数,因为 下标只把第一位数据看做下标。例如: 下标只把第一位数据看做下标。例如: 下标只把第一位数据看做下标。例如:{10}
$*获取所有参数
$#获取所有参数个数

export 变量:表示在全局去生效。变量在哪里都能用

#!/bin/bash
echo $0
echo $1
echo $2
echo $*		#获取所有参数
echo $#		#获取参数个数

引号:
单引号:安原字符串输出
双引号:可以引用变量,拥有特殊含义的内容

拼接:连续获取变量

注意:
如果有多个引号,连续的形成一对
引号中使用其他引号,其他引号做字符串使用

-n 不换行

字符串
获取长度
格式:
${#变量}
截取:
格式:
${变量:开始位置:长度}
注意:
${str::5}:从0获取5个
${str:0}:从0获取到末尾
替换单个
格式:
${变量/旧/新}
注意:从左向右替换第一个
替换所有
格式:
${变量//旧/新}
注意:替换不会再原字符上进行修改,想要修改原字符串只能从新赋值

删除
从头开始删除
${变量#表达式}:匹配第一个删除
${变量##表达式}:匹配最后一个删除
从尾开始删除
${变量%表达式}:匹配第一个删除
${变量%%表达式}:匹配最后一个删除
注意:从未开始删除,表达式还是从左向右去写
删除不会再原字符上进行修改,想要修改原字符串只能从新赋值

#!/bin/bash
x=10
str="asdf${x}zxcv"		
echo ${str}				# asdf10zxcv
str='asdf${x}zxcv'
echo ${str}				# asdf${x}zxcv
echo -n 123				# 123456
echo 456

str="abcdefg"
echo ${#str}			# 7
echo ${str:1:3}			#bcd

echo ${str/abc/123}		#123defg
echo ${str#abc}			#defg
echo ${str}				#abcdefg

运算符

​ 算术运算符
​ bash不支持简单的数学运算,可以通过命令实现expr
​ 格式1:
expr 值 + 值
​ 注意:符号两边需要加上空格
​ 格式2:
​ $[值+值]

比较运算符: > < >= <=…
格式:
$值符号值
注意:比较的结果用1(true)和0(false)表示

逻辑运算符: &/and |/or !/not
例如:
#判断2>1结果
echo $[2 > 1]
#反转2>1结果
echo [ ! [! [![2>1]]

​ #反转后面的结果2>1 and 2>3 false0

​ echo [ ! [! [![KaTeX parse error: Expected 'EOF', got '&' at position 6: [2>1]&̲[2>3]]]

#!/bin/bash
echo `expr 2 + 2`		#4
echo $[2+3]				#5

echo $[2>1]				#1
echo $[!$[2>1]]			#0

-eq 	//equals			等于
-ne 	//no equals			不等于
-gt 	//greater than 		大于
-lt 	//less than			小于
-ge 	//greater equals	大于等于
-le 	//less equals		小于等于


-eq,-ne 等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较
if

​ 格式1:
​ if 判断条件
​ then
​ 判断为true执行的代码
​ fi
​ 格式2:
​ if 判断条件
​ then
​ 判断为true执行的代码
​ else
​ 判断为false执行的代码
​ fi
​ 格式3:
​ if 判断条件
​ then
​ 判断为true执行的代码
​ elif 判断条件
​ then
​ 判断为true执行的代码
​ 。。。
​ else
​ 判断为false执行的代码
​ fi
​ 注意:else可加可不加
判断条件的写法
​ []:[]两边加空格,符号两边加空格并且符号前加转义符
​ 可以使用字母
​ [[]]:[[]]两边加空格,符号两边加空格
​ 可以使用字母
​ ():弃用
​ (()):不需要加空格,但是不能使用字母
​ 在使用变量时,不需要使用$

#!/bin/bash
if [[ 2 -gt 1 ]]
then	echo true		#true
fi


if (($1>$2)) 
then 	
	echo true
else	
	echo "false"
fi

#!/bin/bash
if (($1==100))
then
	echo "$1=100"
elif (($>=60))
	echo "60=<$1<100"
else 
	echo "$1<60"
fi
for

​ java格式:
​ for ((初始化变量;判断条件;控制语句))
​ do
​ 执行语句
​ done
​ python格式:
​ for 变量 in 结果集
​ do
​ 执行语句
​ done
​ 结果集:
​ {开始…结束}含头含尾,不能引用变量
seq 开始 结束含头含尾

#!/bin/bash
#JAVA
for ((i=0;i<=10;i++))
do
	echo "${i}"
done
echo "==================="

#python
for i in 1..10
do
	echo "${i}"
done
echo "=================="

# 求奇数和、偶数和
osum=0
jsum=0
for i in `seq 1 10`
do
	if((${i}%2==0))
	then 
		#osum=`expr ${osum} + ${i}`
		let osum+=${i}
	else
		jsum=`expr ${jsum} + ${i}`
	fi
done
echo "${osum}"
echo "${jsum}"


注意:	使用let在计算时可以直接使用变量
数组

存储多个元素,数据类型可以不同,元素元素之间以空格切分
操作
通过下标获取数据
格式:
${数组[下标]}
注意:
直接引用数组变量,默认获取下标为0的元素
下标使用*表示获取所有
获取长度:
格式:
${#数组[*]}

#!/bin/bash
array=("a" 1 2 3)
echo ${#array[*]}			#4
echo "================"

arr=(1 2 3 4 5)
sum=0
for ((i=0;i<${#arr[*]};i++))
do
	#sum=`expr ${sum} + ${arr[i]}`
	let sum+=${arr[i]}
done
echo ${sum}					#15
read

read:键盘录入
格式:
read 变量1 变量2 …变量n
注意:
键盘录入时,允许给多个变量进行赋值,值和值之间以空格切分

#!/bin/bash
read a b
echo `expr ${a} + ${b}`

#!/bin/bash
read x
arr=(1 2 3 4 5)
for ((i=0;i<=${#arr[*]};i++))
do 	
	if ((${x}==${arr[${i}]}))
	then 
		echo "下标为${i}"
	fi
done

#打印三角形
#!/bin/bash
	for i in {1..5}   #外循环决定行
	do
	        for j in `seq 1 ${i}`	#内循环决定列
	        do
	                echo -n "* "
	        done
	        echo ""
	done
函数

​ 格式:
​ function 方法名(){
​ 方法体
​ return 数字;
​ }
​ 注意:function和return可加可不加
0... 0... 0...n表示接收参数,$0永远是脚本名称(忽略)
​ 方法的调用直接使用方法名不加()
​ return只能返回数字范围在0-255之间
​ $?接收返回值只能接收一次

#!/bin/bash
function fun(){
	echo "参数$1"
	echo "参数$2"
}
fun 100 200

date

获取当前日期时间
date +“%Y-%m-%d %H:%M:%S”

格式化日期时间:
date -d today +“%Y-%m-%d %H:%M:%S”

加减日期时间
date +%Y%m%d //显示前天年月日
date +%Y%m%d --date=“+1 day” //显示前一天的日期
date +%Y%m%d --date=“-1 day” //显示后一天的日期
date +%Y%m%d --date=“-1 month” //显示上一月的日期
date +%Y%m%d --date=“+1 month” //显示下一月的日期
date +%Y%m%d --date=“-1 year” //显示前一年的日期
date +%Y%m%d --date=“+1 year” //显示下一年的日期

重定向

重定向:执行命令的结果写写入到文件

标准输入文件(stdin):stdin的文件描述符为0,默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,向stderr流中写入错误信息。

使用>,>>默认是把正确信息写入文件
想要把错误信息和正确信息写入文件需要后面追加2>&1(把错误信息当做正确信息去处理)

定时器

在这里插入图片描述

​ 格式:
​ *(分) *(时) *(日) *(月) *(周) commend

通过crontab -l 查看有哪些 crontab 任务
通过crontab -e 添加定时任务

查看定时任务是否执行了,看日志tail -f /var/log/cron

注意:
定时器或脚本中涉及到路径的全部给绝对路径

* * * * * 		每分钟
*/1 * * * * 	每分钟
0 */1 * * *		每小时
  • vi crontab.sh (创建脚本文件)
#!/bin/bash
echo "helloworld" >> /shell/crontab.txt
  • crontab -e (创建定时任务)
* * * * * sh /shell/crontab.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值