shell学习笔记

简介: shell学习笔记

1.shell解析器

cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologin


2.查看默认解析器


echo $SHELL


3.脚本格式

脚本以#!/bin/bash开头,指定解析器

#新建一个shell文件

touch helloworld.sh

#编辑脚本

vim helloworld.sh

#查看脚本

[root@iZ2zeaps6av1mswsp60vttZ test]# cat helloworld.sh

#!/bin/bash

echo "hello world"

#执行脚本

[root@iZ2zeaps6av1mswsp60vttZ test]# bash helloworld.sh

hello world


4.多命令处理

需求#在/test建立一个文件1.txt,在1.txt文件中增加“I love you”

#新建文件

touch batch.sh

#编辑文件

[root@iZ2zeaps6av1mswsp60vttZ test]# vim batch.sh

查看文件

[root@iZ2zeaps6av1mswsp60vttZ test]# cat batch.sh

#!/bin/bash

#在/test建立一个文件1.txt,在1.txt文件中增加“I love you”

cd /test

touch 1.txt

echo "I love you" >> 1.txt

#执行文件

[root@iZ2zeaps6av1mswsp60vttZ test]# bash batch.sh

[root@iZ2zeaps6av1mswsp60vttZ test]# ls

1.txt  batch.sh  helloworld.sh

[root@iZ2zeaps6av1mswsp60vttZ test]# cat 1.txt

I love you


5.系统变量

5.1常用系统变量


H O M E , HOME,HOME,PWD,$SHELL $USER


5.2显示当前shell中所有变量:set

5.3定义变量A=3

撤销变量unset

声明静态变量readonly

默认变量为字符型吗,无法直接进行数值运算

可把变量提升为全局环境变量:export 变量名


6.特殊变量$n

$0:代表该脚本名称

$1-$9:代表第一到你九个参数

$#:获取参数的个数,常用于循环

∗ : 这 个 变 量 命 令 行 中 所 有 的 参 数 , *:这个变量命令行中所有的参数,∗:这个变量命令行中所有的参数,*把所有的参数看成一个整体

@ : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @:这个变量也代表命令行中所有的参数,不过@:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待

$?:最后一次执行命令的返回状态,如果这个变量的值为0,证明上次执行的命令正确,若为

非0,证明上一次命令执行不正确

例子:


vim parameter.sh

[root@iZ2zeaps6av1mswsp60vttZ test]# bash parameter.sh  I

parameter.sh I


I

I

[root@iZ2zeaps6av1mswsp60vttZ test]# bash parameter.sh  I love you

parameter.sh I love


I love you

I love you


7.运算符

7.1基本语法:( ( 运 算 式 ) ) 或 者 ((运算式))或者((运算式))或者[运算式]


$((2+3))

-bash: 5: command not found

[root@iZ2zeaps6av1mswsp60vttZ test]# echo $?


[root@iZ2zeaps6av1mswsp60vttZ test]# echo $((2+3))


[root@iZ2zeaps6av1mswsp60vttZ test]# echo $[2+3]



.2expr +,-,*,/,% 加减乘除取余,expr 运算符间要有空格


expr 2 + 3

5

echo $[(2+3)*4]

20

expr `expr 2 + 3`\*4

5*4


8.条件判断:

8.1基本语法:

[condition] (注意condition前后要有空格),条件非空为true

8.2常用判断条件

1)两个整数之间比较

= 字符串比较

-lt小于 -le小于等于

-eq等于 -gt 大于

-ge 大于等于 -ne不等于

2)按照文件权限进行判断

-r 有读的权限 -w有写的权限

-x 有执行的权限

3)按照文件类型进行判断

-f文件存在并且是一个常规文件

-e文件存在

-d文件目录存在并是一个目录

4)多条件判断(&&表示前一条命令执行成功,才执行后一条命令

|| 表示上一条命令执行失败才执行下一条命令)

示例:


vi condition.sh

#!/bin/bash

#23是否大于等于22

[ 23 -ge 22 ]

#判断helloworld是否具有写权限

echo $?

[ -w helloworld.sh ]

echo $?

#判断/test/parameter是否存在

-e /test/parameter.sh ]

echo $?


9.控制流程

9.1 if判断

if [条件判断式];then

程序

fi

或者

if [ 条件判断式 ]

then

程序

fi

例子:


[root@iZ2zeaps6av1mswsp60vttZ test]# cat if.sh

#!/bin/bash

if [ $1 -eq "1" ]

then

echo "你真帅"

elif [ $1 -eq "2" ]

then

echo "你真美"

fi

bash if.sh 1

你真帅

[root@iZ2zeaps6av1mswsp60vttZ test]# bash if.sh 2

你真美


9.2case

case $变量名 in

“值1”)

如果变量的值等于值1,则执行程序1

;;

“值2”)

如果变量的值等于值2,则执行程序2

;;

省略其他分支

*)

如果变量的值都不是以上的值,则执行此程序

;;

esac


例子:


[root@iZ2zeaps6av1mswsp60vttZ test]# touch case.sh

[root@iZ2zeaps6av1mswsp60vttZ test]# vim case.sh

[root@iZ2zeaps6av1mswsp60vttZ test]# bash case.sh 1

morning

[root@iZ2zeaps6av1mswsp60vttZ test]# bash case.sh 2

afternoon

[root@iZ2zeaps6av1mswsp60vttZ test]# bash case.sh 3

evening

[root@iZ2zeaps6av1mswsp60vttZ test]# bash case.sh 4

no answer

[root@iZ2zeaps6av1mswsp60vttZ test]# cat case.sh

case $1 in

"1")

echo "morning"

;;

"2")

echo "afternoon"

;;

"3")

echo "evening"

;;

*)

echo "no answer"

;;

esac


9.3 for 循环

语法1:

for((初始值;循环控制条件;变量变化))

do

程序

done


实例:从1加到100

bash for.sh

5050

[root@iZ2zeaps6av1mswsp60vttZ test]# cat for.sh

#!/bin/bash

s=0

for((i=0;i<=100;i++))

do

s=$[$s+$i]

done

echo $s


语法2:for 变量 in 值1 值2 值3…

do

程序

done

实例:


#!/bin/bash

for i in $*

do

echo "$i"

done


9.4while循环

语法:

while [ 条件判断式 ]

do

程序

done


vim while.sh

[root@iZ2zeaps6av1mswsp60vttZ test]# cat while.sh

#!/bin/bash

s=0

i=1

while [ $i -le 100 ]

do

s=$[$s+$i]

i=$[$i+1]

done

echo $s

[root@iZ2zeaps6av1mswsp60vttZ test]# bash while.sh

5050


10.read读取控制

台输入

基本语法:

read(选项)(参数)

选项:-p :指定读取值时的提示符

-t:指定读取等待的时间

参数:指定读取的变量名

bash read.sh

enter youe name in 7 seconds12

12

[root@iZ2zeaps6av1mswsp60vttZ test]# cat read.sh

#!/bin/bash

read -t 7 -p “enter youe name in 7 seconds” NAME

echo $NAME

11.函数


11.1系统函数

basename的基本语法:basename [string/pathname][suffix]

功能:basename命令会删掉所有的前缀包括最后一个(“/”)字符,然后将字符串显示出来

例子:

basename /test/parameter.sh .sh

parameter

11.2firname基本语法

dirname文件绝对路径

功能描述:从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径

实例:

dirname /test/parameter.sh

/test

11.3自定义函数

基本语法:

[ function ] function[()]

{

Action;

[return int;]

}

funname

实例:


bash fun.sh

please inout the number1:12

please input the number2:23

35

[root@iZ2zeaps6av1mswsp60vttZ test]# cat fun.sh

#!/bin/bash

function sum()

{

s=0

s=$[ $1 + $2 ]

echo $s

}

read -p "please inout the number1:" n1;

read -p "please input the number2:" n2;

sum $n1 $n2;


12.shell工具

12.1 cut 负责剪切数据用的,cut命令从文件的每一行剪切字节、字符和字段并将字节、字符和字段输出

用法:cut [选项参数] filename

默认分隔符为制表符

选项参数:

-f 列号,提取第几列

-d 分隔符,按照指定分隔符分割列


[root@iZ2zeaps6av1mswsp60vttZ test]# cat cut.txt

#!/bin/bash

dong shen

guan zhen

lai lai

le le

[root@iZ2zeaps6av1mswsp60vttZ test]# vim cut.txt

[root@iZ2zeaps6av1mswsp60vttZ test]# cut -d " " -f 1 cut.txt

dong

guan

lai

le

[root@iZ2zeaps6av1mswsp60vttZ test]# cut -d " " -f 2 cut.txt

shen

zhen

lai

le

[root@iZ2zeaps6av1mswsp60vttZ test]# cat cut.txt | grep "guan" | cut -d " " -f 1

guan


12.2 sed,sed是一种流


编辑器,一次处理一行内容

基本语法:

sed[选项参数] ‘command’ filename

选项参数说明:

-e 直接在命令模式进行sed动作编辑

命令功能描述

a 新值,a的后面可以接字符串,在下一行出现

d 删除

s 查找并替换

g表示global,全部替换

touch sed.txt

[root@iZ2zeaps6av1mswsp60vttZ test]# vim sed.txt

[root@iZ2zeaps6av1mswsp60vttZ test]# sed ‘2a mei nv’ sed.txt

dong shen

guan zhen

mei nv

lai lai


le le

[root@iZ2zeaps6av1mswsp60vttZ test]# vim sed.txt

[root@iZ2zeaps6av1mswsp60vttZ test]# sed ‘/wo/d’ sed.txt

dong shen

guan zhen

lai lai


le le

[root@iZ2zeaps6av1mswsp60vttZ test]# sed ‘s/le/liao/g’ sed.txt

dong shen

guan zhen

wo wo

lai lai


liao liao

12.3 awk 一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片

切开的部门再进行分析处理

基本语法:

awk [选项参数] ‘pattern{action1} pattern2{action2}…’ filename

pattern :表示awk在数据中查找的内容,就是模式匹配

action:在找到匹配内容时所执行的一系列命令

-F 指定输入文件拆分分隔符

-v 赋值一个用户定义变量

12.4 sort 文件排序输出,并排序结果标准输出

sort(选项)(参数)

选项:

-n 依照数值的大小排序

-r 以相反的顺序排排序

-t 设置排序时所用的分隔字符

-k 指定需要排序的列

相关文章
|
8月前
|
Shell Linux C++
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
130 0
|
SQL 存储 NoSQL
Kudu 整合 impala-shell 操作 | 学习笔记
快速学习 Kudu 整合 impala-shell 操作
668 0
Kudu 整合 impala-shell 操作 | 学习笔记
|
4月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
4月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
4月前
|
存储 Java Shell
shell学习笔记(详细整理)
这篇文章是一份详细的Shell学习笔记,涵盖了Shell的基础知识、脚本编写、变量、运算符、条件判断、流程控制、函数以及常用Shell工具的使用。
121 1
|
8月前
|
Java Shell Linux
Shell编程 学习笔记
Shell编程 学习笔记
105 1
|
Shell Linux Perl
shell 学习笔记
shell 学习笔记
85 1
|
Java 大数据 Shell
Azkaban--使用实战--shell、command 调度 | 学习笔记
快速学习 Azkaban--使用实战--shell、command 调度
945 0
Azkaban--使用实战--shell、command 调度 | 学习笔记
|
SQL Shell PHP
某教程学习笔记(一):19、任意文件上传和sql语句拿shell
某教程学习笔记(一):19、任意文件上传和sql语句拿shell
110 0
某教程学习笔记(一):19、任意文件上传和sql语句拿shell
|
运维 Java Shell
Linux Shell 训练营 Day3|学习笔记
快速学习 Linux Shell 训练营 Day3。
174 0
Linux Shell 训练营 Day3|学习笔记