shell基础

tech2022-08-04  157

1.第一个脚本:shell入门

1.1.shell脚本格式: 脚本以#!/bin/bash 或者 #!/bin/sh (指定解析器) 1.2.创建一个脚本文件 touch 文件名.sh 1.3.执行脚本文件 sh 文件名.sh [参数列表] 或者 bash 文件名.sh [参数列表] 1.4.输出“hello world” #!/bin/bash echo "hello world"

2.第二个脚本:多命令处理

#!/bin/bash cd /home/ touch bangzhang.txt echo "I love you" >> banzhang.txt --切换至/home目录下创建banzhang.txt文件,并在文件中写入文本 echo:输出字符串到屏幕/提取shell变量的值

3.shell变量:

3.1.系统变量 $HOME:当前用户的家目录 $PWD:当前的目录 $SHELL:默认的解析器 --> /bin/bash $USER:当前用户 3.2.自定义变量 自定义字母=值 ==>局部变量 注意:等号两边没有空格 3.3.利用echo 输出变量的值 echo $变量名 3.4.撤销变量: unset 变量名 3.5.静态变量:只读 readonly 变量名=值 输出打印变量 echo $变量名 静态变量手动取消不了,在虚拟机重启后,自动取消 注意:在bash中,所有的变量类型都是字符串类型,无法直接进行数据运算 如果变量的值有空格,需要用双引号括起来 "i love you" 3.6.把变量升级为全局变量,可供其他shell程序使用 export 局部变量名 3.7.特殊变量: $_ 是上个命令的最后一个参数 $? 返回的是:上一个命令的退出状态,或函数的返回值, 或最后一条命令的执行状态=>返回0:正确执行,返回非0:不正确执行 $! 最近一个后台命令的PID $n 传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2....${10}.... $0 当前脚本的文件名 $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。 被双引号 "值" 包含时,与$*稍有不同, $@不会把 "值" 当作整体 $*会把 "值" 当作整体 $$ 表示当前Shell进程的ID,即pid $- 列出Set命令设定的Flag

4.shell运算符

4.1 $((运算表达式)) 或 $[运算符表达式] s=$[运算表达式] echo $s 4.2 expr +,-,\*,/,% 加减乘除求余 expr 2 + 1 每个字符之间都需要有空格 expr `expr 2 + 3 ` \* 5 ==>等价于 (2+3)*5

5.条件判断

5.1 [ 具体的条件 ]==>中括号里面前后要有空格、 --条件非空即为true 条件为空即为false (1)字符串之间的比较 =字符串比较 (2)数字之间的比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 (3)文件权限的判断 -r 读 -w 写 -x 执行 (4)判断文件类型 -f 是否是普通文件 -e 文件是否存在 -d 是否文件夹 (5)多条件判断 &&:并 ||:或

6.流程控制

6.1 if判断语句 语法: if[ 条件判断式 ];then 程序代码 fi 或 if [ 条件判断式 ] then 程序 fi 注意:中括号里面前后一定要有空格 6.2 case语句 case $变量名 in "值1") 如果满足值1:则执行此程序 ;; "值2") 如果满足值2:则执行此程序 ;; ...... *) 都不满足以上的值,就执行此程序 ;; 6.3 for循环 语法1: for((初始值;循环条件;变量变化)) do 程序 done -案例:1+...+100 #!/bin/bash export s=0 for (( a=1 ; a<= 100 ; a++ )) do s=$[ s+a ] done echo $s 语法2: for 变量 in 值1 值2 值3.... (in后面的值有依次把值赋给前面的变量) do 程序 done 例: #!/bin/bash for a in $* ($*我们自己传入的参数) do echo $a done 6.4 while 循环 while [ 条件表达式 ] do 程序 done -案例:1+...+100 #!/bin/bash i=0 a=0 while [ $i -le 100 ] do a=$[ a+i ] i=$[ i+1 ] done echo $a 注意:[]中一定要遵循shell语法, -[]里面前后要有空格 -[]里面的运算表达式需要使用shell的运算符

7.读取控制台的输入

read 选项 参数 选项:-t指定几秒输入, -p提示内容 相当于python中的input("请输入你的名字:") #!/bin/bash read -t 10 -p "input your name:" name (在10秒内输入你的名字) echo $name

8.系统函数

8.1 basename 文件路径 [文件后缀名] basename命令主要用于显示文件路径名剔除目录部分后的显示文件名。 如何指定了在最后指定了文件后缀,同时也删除文件的扩展名。 basename /home/datas/a.sh ===>输出:a.sh basename /home/datas/a.sh .sh ===>输出:a 8.2 dirname 文件的绝对路径 去除文件名(非目录部分),返回文件夹路径 dirname+basename=文件的绝对路径

9.自定义函数

function 函数名(){ 程序 } #!/bin/bash 例: #定义函数 function func(){ a=0; a=$[ $1+$2 ] return $a } read -p "输入你的第一个参数:" num1 read -p "输入你的第二个参数:" num2 #调用函数 func $num1 $num2 echo $? 函数返回值:return n(0-255) echo $? 注意: 必须要在调用函数之前,声明函数。shell脚本是逐行运行的,不先进行编译的

10.shell工具

10.1 cut 从文件中剪切出自己需要的数据,并将这些数据输出 cut 选项 文件名 选项: -f 1,2,..多列 :需要剪切第几列/多列 -f 3- 第三列以后的 -d "\t":指定分割符 10.2 sed 用法1: 查看一个文件中的某一行,或者某几行的内容 sed -n 'a,bp' song.txt读取自第a行到第b行的数据 例: cut.txt中的内容是: a aa b bb c cc d dd 剪切出第一列的内容: cut -f 1 -d " " cut.txt 输出的内容是: a b c d 例: 切取第三列”:“以后的: echo $PATH | cut -d ":" -f 3- 用法2: sed编辑器逐行处理文件输入,然后把结果发送到屏幕 sed 参数 参数: -e:多重编译 sed -e ‘1,3d’ -e ‘s/abc/def/g’ file 删除1-3行,然后把其余行的abc替换成def a/:追加一行 1.sed "2a 增加的内容" 针对的文件 --在第二行下面增加内容 2.sed "/文件中具体的文字/a\需要添加的内容" 针对的文件 d:删除 sed "/需要删除的内容/d" 针对的文件 s:替换 sed "s/需要替换的内容/替换内容/g" 针对的文件 g:global全局的
最新回复(0)