shell 学习笔记

shell 学习笔记

shell脚本就是将完成一个任务的所有命令按照先后顺序,自上而下写入到一个文本文件然后给予执行权限。

chomd +x 文件名
./文件名#执行

文件名名要有意义
脚本编写

#!/usr/bin/bash
//#!是特例,解释运行的环境
#Author //作者
#Created //Time时间
#描述

运行脚本
1、给执行权限 chmod +x、用路径运行
2、解释器直接运行 bash、sh
特殊符号

~:家目录
-:上一级目录
!:执行历史命令
+ 、—、*、/, %:对应数学运算
&:后台执行
*:shell通配符,匹配所有
?:shell通配符,匹配除回车以外的一个字符
;:分号可以在shell中执行多个命令
|:管道符,是一个是一个命令作为下一个命令的输入
\:转义字符
'':反引号,命令中执行命令
‘’:单引号,脚本中字符要有单引号引起来,不同于双引号,单引号不解释变量
“”:双引号,脚本中出现的字符用双引号引起来
> :重定向覆盖原有数据
>> : 重定向追加输出,在原有数据的末尾添加
< :重定向输出 
<< :重定向追加输出

/dev/null 回收站

echo命令介绍
功能:将内容输出到默认显示器,输出后换行

-n:当指定-n选项时,其后的换行符被抑制;即不会在最后自动换行。

-e:当指定-e选项时,则将解释以下反斜杠转义字符:

 \\ - 插入反斜杠(\)字符。

 \a - 警报(BEL)

 \b - 显示退格字符。

 \c - 抑制任何进一步的输出,最后不加上换行符号

 \e - 显示转义字符。

 \f - 显示换页符。

 \n - 显示新行。

 \r - 显示回车。

 \t - 显示水平选项卡。

 \v - 显示垂直选项卡。

-E:当指定-E选项时,禁用转义字符的解释,这是默认值。

使用echo命令时需要考虑几点:

● 在将参数传递给echo命令之前,shell将替换所有变量、通配符匹配和特殊字符。

● 尽管没有必要,但是用双引号或单引号将传递给echo命令的参数括起来是一种很好的编程实践。

● 使用单引号时(’’)时,将保留引号中包含的每个字符的字面值。变量和命令将不会展开。
 
 用法:seq [选项]… 尾数
 或:seq [选项]… 首数 尾数
 或:seq [选项]… 首数 增量 尾数
以指定增量从首数开始打印数字到尾数。
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同
–help 显示此帮助信息并退出
–version 显示版本信息并退出
如果省略了首数或者增量,则默认其值为1,即使这样尾数仍小于首数。
首数、增量和尾数均以浮点数形式解释。当首数小于尾数时增量一般为正值,
相反在首数大于尾数时增量一般为负数。
指定的格式必须适用于显示"double"类型的参数;当首数、增量和尾数均为指定
精确度的定点十进制数时默认为"%.精确度f",否则默认为"%g"。
格式化输出
字体背景颜色

echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

字符串颜色

echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"

效果

/033[0m		#关闭所有属性
/033[1m		#设置高亮度
/033[4m		#下划线
/033[5m		#闪烁
/033[7m		#反显
/033[8m		#消隐

输入

read命令
read 命令选项

-p打印信息
-t限定时间
-s不回显
-n输入字符个数

变量

1、变量的介绍
定义变量时,变量名不加美元符号($,PHP语言中变量需要)
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
2、变量的分类
变量类型
运行shell时,会同时存在三种变量:

  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
    1、本地变量:用户的私有变量,只有本用户可以使用,保存在家目录下的,bash_profile、.bashrc文件中
    2、全局变量:所有用户都可以所有的保存在/etc/profile、/etc/bashrc文件中
    3、用户自定义变量:脚本中的变量

3、变量的管理

定义变量:name=value
读取变量内容符:$
读取方法:$变量名
取消变量:unset 变量名
定义全局变量:前面加export
定义永久变量:写在配置文件里面/etc/profile、/etc/bashrc

数组

可以存多个变量的一种数据结构
数组语法

数组名称=(元素1 元素2...)

数组读出

${数组名称}[索引]
默认从0开始

数组赋值
一次赋一个值
array[0]=“l”
一次赋值多个
array={}
参看数组
declare -a
遍历数组

关联数组

流程控制-if判断语句
数学比较运算比较的是整形

-eq   等于
-gt    大于
-lt     小于
-ge   大于或者等于
-le    小于或者等于
-ne   不等于

shell 下返回0为真,返回1为假

文件比较与检查

1、文件状态:

表达式:[ -e 文件路径 ] 有空格隔开

例如:[ -e /root ] 判断/root 是否存在

1) -e 是否存在 存在为真

2) -d 是否是目录 是目录为真

3) -f 是否是文件 是文件 为真

4) -x 是否有执行权限 有执行权限为真

5) -w 是否有写权限 有写权为真

6) -r 是否有读权限 有读权限为真
  
7)-G检查文件是否存在并且默认组为当前用户

8)-O检查文件是否存在并且被当前用户拥有

字符串比较运算

字符串一定要用引号引起来
==等于 
!=不等于
-n检查字符串长度是否大于0
-z检查字符串的长度是否为0

逻辑运算

&& 与
|| 或
!非

if语句

单if:只要一步判断。条件返回真干什么或者条件返回假干什么

if [ condition ]     #condition 的值为true或者fales
	then
		commands
fi

if-then-else语句
两步判断,条件为真干什么,条件为加干什么

if [ condition ]     #condition 的值为true或者fales
	then
		commands1
	else 
		commands2
fi

if 高级应用

if((数学表达式));
#双小圆括号使用比较运算符>>==<<!
then
if [[  ]]双小方括号,可以在条件中使用通配符字符串匹配

for循环语句
条件循环
或者for i in语法
语法

for var in value1 value2 ......
	do
		commands
done

语法2

for((变量;条件;自增减运算))
	do
		代码块
	done

明确知道循环次数用for
不知道用while

whlie循环

while [ condition ] #注意条件为真才会循环,数学比较运算、字符串比较运算、文件类型、逻辑运算、赋值运算
do 
	commands
done 

while的嵌套
嵌套 if for while

until语句
与while正好相反,条件为假开始执行,条件为真停止执行。

while [condition ] 
	do 
		commands 代码块
	done

case 语法
语法

case 变量 in
	条件1)
		执行代码块1
	;;
	条件2
		执行代码块2
		;;
		........
		esac
		#注意每个代码块执行完毕要以;;结尾代表结束,case结尾要以倒过来写的esac来结尾。

shell特殊变量

$0	当前脚本的文件名
$n	传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#	传递给脚本或函数的参数个数。
$*	传递给脚本或函数的所有参数。
$@	传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$?	上个命令的退出状态,或函数的返回值。
$$	当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

函数

将代码模块化,一个模块实现一个功能。
1、代码模块化,调用方便、节省内存
2、代码量少、排错简单
3、可以改变代码的执行的顺序
语法 一:

函数名(){
	代码块
	return N
	}

语法 二:

function 函数名{
	代码块
	return N
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

科技树AI

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

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

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

打赏作者

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

抵扣说明:

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

余额充值