当前位置:网站首页>shell脚本总结
shell脚本总结
2022-07-29 02:54:00 【ELIAUK``】
目录
一.Shell解释器介绍.....................................................................................................................1
二.Shell执行的文件.....................................................................................................................2
三.Linux终端快捷方式.................................................................................................................3
四.括号功能介绍...........................................................................................................................4
五.变量..........................................................................................................................................5
六.判断.........................................................................................................................................6
七.循环.........................................................................................................................................7
八.进程并发...................................................................................................................................8
九.数组.........................................................................................................................................9
十.函数.......................................................................................................................................10
十一.小知识总结..........................................................................................................................11
一.Shell介绍:
Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。
二. Shell执行的文件:
开机执行文件:
1. 系统级别:/etc/profile //加载变量
/etc/bashrc //执行文件命令
2. 用户级别:.bash_profile
.bashrc关机执行文件:
.bash_history //加载文件历史命令
.bash_logout //执行文件命令
注:su - :4个文件全都执行。 su:只执行/etc/bashrc和.bashrc文件。三.Linux终端快捷方式:
1. 快捷键:
ctrl+r:搜索历史命令 ctrl+d:退出当前shell ctrl+a:到行首 ctrl+b:到行尾
ctrl+u:删除光标前 ctrl+k:删除光标后 ctrl+s:锁屏 ctrl+q:解锁
ctrl+y:撤销 ctrl+c:终止执行 ctrl+z:放到后台并暂停。2. 命令历史记忆:
!:历史命令ID号。 !:字符。 !$:上一个文件的最后参数。 !!:上一个命令。四.括号功能介绍:
( ):在子shell执行命令。 $( ):命令替换。 $(( )):数值运算。 {}:集合
${}:变量应用。 [ ]:判断。 [[ ]]:判断支持正则。 $[ ]:数值运算。
echo ${#URL} //输出URL内字符有多少。
echo ${URL#*.} //从左往右删除第一个.
echo ${URL##*.} //从左往右删除到最后一个.
echo ${URL%*.} //从右往左删除第一个.
echo ${URL%%*.} //从右往左删除到最后一个.
echo ${URL:4:5} //切片从输出第4个字符到后面5个字符
echo ${URL/www/zcl} //替换第一个
echo ${URL//www/zcl} //替换全部
${URL:=www.baidu.com} //只有URL没有被赋值和为空时,赋予后面的数值。${URL=www.baidu.com} //只有URL没有赋值则,赋予一个数值,为空不赋值。${URL:-www.baidu.com} //只有URL没有被赋值和为空时,显示后面的数值。${URL-www.baidu.com} //只有URL没有被赋值,显示后面的数值。
五.变量:
1. 变量类型:
交互式变量: read -t 5 -p "提示文字" 变量名称
自定义变量:只在当前shell生效
环境变量: 当前shell以及子shell都生效
位置变量: $1 $2 $3 $4 $5 $6 $7 $8 ${9 }
预定义变量:
$0:脚本名称
$*:所有的参数
[email protected]:所有的参数
$#:参数的个数
$$:当前进程的PID
$!:上一个后台进程的PID
$?:上个命令的返回值。
2.变量查,增,删:
env:查看所有环境变量:
export:设置环境变量
unset:取消环境变量
3.常用环境命令:
PS1:设置提示符
IFS:变量拆分,默认是空格,tab,换行符。OLD_IFS=$IFS:保存IFS。IFS=OLD_IFS:还原。
PATH:外部命令存放路径。
UID:root的uid默认为0
TMOUT:会话超时时间
HISTSIZE:历史命令保存多少条。
HISTTIMEFORMAT=’%F%T’:历史命令执行时间
LANG:语言环境 LANG=en_US.UTF-8 英文环境 LANG=zh_CN.UTF-8 中文环境。六.判断:
test -d a.txt -a -f zcl.txt //结果为1 -a表示与
test -d a.txt -o -f zcl.txt //结果为0 -o 表示或
test ! -d a.txt -o -f zcl.txt //结果为1 !表示非
[ 条件表达式 ]
[[ 条件表达式 ]]
1.文件判断:
-d:判断是否为目录。 -f:判断是否为文件。 -e:判断是否存在。 -r:判断读的权限。
-w:是否有写得权限。 -x:是否有执行的权限。-b:文件存在并且是快设备。 -c:文件存在并且是字符设备。 -k:文件存在并设置粘滞位。-L:文件存在并且是链接文件 -ot:文件比谁新。 -nt:文件比谁旧。
2.整数判断:
-eq:判断是否相等。 -nq:判断是否不相等。 -lt:判断是否小于。 -le:判读是否小于等于。 -gt:判读是否大于。 -ge:判断是否大于等于。
3.字符串判断:
==:判断是否等于。 !=:判读是否不等于。 -z:判断是否为空。
4.逻辑判断:(&&与,||或,!非)等运算符。
if [ -f name ] && [ -d name ];then echo 'yes';else echo 'no';fi &&:只要一方判断错误就no。
if [ -f name ] || [ -d name ];then echo 'yes';else echo 'no';fi ||:只要一方判读正确就是yes。
if [ ! -f name ] && [ ! -d name ];then echo 'yes';else echo 'no';fi !:取反判断。七.循环:
while read line;do echo “$line” ;done < /root/a.txt
#while IFS进行了过滤,对变量内容为换行符作为拆分。
for i in `cat /root/a.txt`;do echo $i ;done
#for遵循了IFS:默认是以空格,tab,换行符作为分隔。 需要设置IFS=$’\n’。只有换行分隔。八.进程并发:
1.匿名管道和命名管道都是文件:
匿名管道:| 注:普文件读取后不会删除数据,而管道文件会读取后删除数据。
命名管道:mkfifo /tmp/fifo1 echo “wudidege” > /tmp/fifo1 cat /tmp/fifo1
exec 6<> file1 打开一个文件并指定文件描述符。
exec 6<&- 关闭文件,后会自动删除文件描述符。
无限制并发:
{命令}&
有限制并发:
count=5
mkfifo test_fifo
exec 8<> test_fifo
rm -rf test_fifo
seq $count >&8
start=`date +%s`
for i in {1..50}
do
read -u 8
{
echo $i;sleep 2
echo >&8
}&
done
wait
exec 8<&-
echo "Time" "$((`date +%s` - start))s"九.数组:
普通数组:只能使用整数作为索引。
关联数组:可以使用整数和字符串作为索引。
一.普通数组:
数组赋值:
方法一:一次赋予一个值。
数组名[下标]=变量值。
#array1[0]=zcl
#array1[1]=lfy
#array1[2]=ycq
#array1[zcl++]=xzj //添加一个xzj的元素,并且索引是3。
方法二:一次赋予多个值。
#array1=(zcl lfy ycq)
#array2=(`cat /etc/passwd`) //如果文件每一行中没有空格,则默认将每一行作为元素存储到元组里面。如果有一空格则会切分后再存储。
#array3=(`ls /var/ftp/Shell/for*`)
#array4=(zcl lfy ycq “ZCL CTO”)
#array5=($name $size $count)
#array6=(1 2 3 4 “ZCL CTO” [20]=WUDI)
查看数组:
#declare -a
访问数组:
#echo ${array1[0]} //访问数组内的第一个元素。
#echo ${array1[@]} //访问数组内的所有元素,等同于echo ${array1
}
#echo ${#array1[@]} //查看数组内元素的数量。
#echo ${!array1[@]} //获取数组内元素的索引。
#echo ${array1[@]:1} //从数组下标1开始访问。
#echo ${array1[@]:1:2} //从数组下标1开始访问两个元素。
遍历数组:
for i in ${!a[@]};do echo "$i: ${a}" ;done
关联数组:
declare -A //查看关联数组。
declare -A sex //定义一个关联数组。
sex=([m]=1)
sex+=([f]=1) //追加一个元素
let sex[f]++ //元素的值加1
let zcl[$a]++ //添加一个$a作为索引和遇到相同元素加1。十.函数:
函数用于完成特定功能的代码块,便于复用代码,函数必须先定义才能使用。
定义:
1.函数名(){ 2. function 函数名(){
实现的功能代码 实现的功能代码
} }
函数调用:
函数名 $1 $2 $3 将位置参数传入函数内。十一.小知识总结:
++赋值:
let x=a++:先赋值在++。
let y=++b:先++在赋值。
expr 1 + 1
变量的引用:
a='ls -l':强引用会输出内容本身。等同于""。
a=`ls -l`:弱引用会执行命令。等同于$()。
type:查看命令的绝对路径。
file:查看文件的类型。
for i in {1...$a} //错误写法这里识别不了变量
for i in `seq $a` //正确写法
表示码:
0:标准输入。 1:标准输出。 2:错误输出。 &:表示1和2。
echo 变量 //不打印换行
echo “变量” //加上双引号后打印换行
边栏推荐
- 第2章 VRP命令行
- C language: hollow square pattern
- codeforces每日5题(均1500)-第二十五天
- MySQL compound query (important)
- Typescript学习(一)
- vim常用命令
- 【FreeSwitch开发实践】UniMRCP编译与安装
- Interpretation of ue4.25 slate source code
- Inventory of domestic and foreign project collaborative management software: SAAS and customization become a trend
- Analysis of Project-based Learning Creativity in steam Education
猜你喜欢

百度副总裁李硕:数字技术加持下中国劳动力成本上升是好事

2022-07-28 顾宇佳 学习笔记

Verilog's time system tasks - $time, $stime, $realtime

每周推荐短视频:如何让产品开发更加有效?

第09章_性能分析工具的使用

TP5.0 小程序用户无需登录,直接获取用户手机号。

Hangao database best practice configuration tool Hg_ BP log collection content

Day 8 notes

What is SOA (Service Oriented Architecture)?

Analyzing the subjective consciousness of emotional resonance between robots and human beings
随机推荐
Unable to start after idea installation
MySQL compound query (important)
C陷阱与缺陷 第3章 语义“陷阱” 3.3 作为参数的数组声明
Multithreading realizes concurrent reading and execution of multi use case files +selenium grid4 realizes distributed deployment of test framework
11. Writing rules - pseudo target
解析机器人与人类情感共鸣的主观意识
Confusion matrix learning notes
明明开发薪资高,为什么我还是选了测试?
Linux下安装MySQL8.0的详细步骤
R language error: compilation failed for package '****‘
Trample --- discretization + tree array + difference
C陷阱与缺陷 第2章 语法“陷阱” 2.6 “悬挂”else引发的问题
HTB-Blocky
Self organization is the two-way rush of managers and members
Analysis of Project-based Learning Creativity in steam Education
Pgzero aircraft war
看机器人教育引领素质教育主流
第2章 VRP命令行
Why did I choose the test when the development salary was high?
瀚高数据库最佳实践配置工具HG_BP日志采集内容