Shell 脚本基础语法

Shell脚本

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

定义脚本的执行环境

#!/usr/bin/bash 
注意;#不是注释

运行shell 脚本的方法

test1.sh 代码

#!usr/bin/bash 
echo "holle word"

1.给执行权限

chmod u+x filename
chmod 700 test1.sh  #给设置执行权限
./test1.sh  #使用./file.sh 执行文件
holle word #打印结果

2.使用解释器直接运行

bash filename
bash test1.sh #使用bash 指令
holle word  #打印结果

shell 中的特殊符号

符号名称解释
~家目录使用 cd ~代表计入家目录
!执行历史命令!! 执行上一条命令 ! 后面跟字母匹配历史执行该字母最后执行的一次命令
$变量中取内容符号
+ - * \ %对应数学运算加 减 乘 除 取余数
&后台执行
*通配符匹配所有
?通配符匹配除回车以外的一个字符
分号可以在shell中一行执行多个命令命令之间用的是分隔符
|管道符上一个命令的输出作为下一个命令的输入 ps -a | grep “xxx”
\转义符表示下一个符号为特殊字符
` `反引号命令中执行命令echo “today is `date +%F`"
’ ’单引号脚本中字符串用单引号引起来,单引号不解释变量
" "双引号脚本中出现的字符串可以用双引号引起来 ,解释变量

shell 特殊变量

符号说明
$0shell 的命令本身
$?显示最后命令的执行情况
$$脚本运行的当前进程ID号
$#脚本传参的个数
$*以一个单字符显示所有像脚本传递的参数
$!后台运行的最后一个进程的ID号
$-显示shell使用的当前选项
$Nshell的第几个外穿参数

shell管道

管道符在shell中的使用是最多的。很多组合命令都需要通过组合命令来完成输出。管道符其实接收下一个命令对上一个命令

重定向

符号作用
>覆盖写入
>>注解写入
<从指定文件读取内容
<<追加输出

示例:

[root@root shellfile] touch test.txt //创建文本
[root@root shellfile] echo "您好" >test.txt //将echo 覆盖写入test.txt文件中
[root@root shellfile] cat test.txt // 读取test.text文件
您好
------------------------------------------------------------------------
[root@root shellfile] echo "您好"  >>test.txt  //追加写入
[root@root shellfile] cat test.txt            //查看test.txt文件
您好
您好
------------------------------------------------------------------------
[root@root shellfile] cat <<-EOF >test.txt 
> 测试 
> 测试2
> EOF
[root@root shellfile] cat test.txt
测试 
测试2
--------------------------------------------------------------------------
[root@root shellfile] cat < test.txt
测试 
测试2



echo指令

指令示例
echo [选项] [输出内容]echo “holle”

选项:
-e: 支持反斜线控制的字符转换
-n : 不换行输出

echo -e 字符转换解释
\a输出警告音
\007输出警告音,警告音可以和sleep配合
\b退格键,也就是向左删除键
\c取消输出行末的换行符。和“-n”选项一致
\eESCAPE键 就是esc键子
\033ESCAPE键
\f换页符
\n换行符
\r回车键
\t制表符,也就是Tab键
\v垂直制表符
\0nnn按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh按照十六进制ASCII码表输出字符。其中hh是两位十六进制数
\e[1;开启颜色
\e[0m关闭颜色

整数运算

指令示例
experexper 1 - 1
$(( ))$((1 + 2))
$[ ]$[1+2]
expr 1 * 2 #注意数字 运算符直接需要加空格
2   #输出结果
$((0+2))  #使用该指令进行运算
2 #输出结果

read指令

默认接受键盘的输入,回车代表输入结束。

read [命令选项]解释
-p打印信息
-t限定时间
-s不回显
-n输入字符的个数

read 指令使用后如果,如果想使用输入后的值,需要给read 后面添加变量名,然后使用$变量名获取输入值,示例如下

#!/var/bin/bash 
echo -e -n "请输入用户名:";read user 
 #可以使用 read -p "请输入用户名:" 代替
echo -e -n "请输入密码" ;read pass
echo -n -e"用户名: $user 密码: $pass \n"
#调用该脚本
 bash shell_02.sh
#执行结果
请输入用户名:user_01
请输入密码:pass_01
用户名: user_01 密码: pass_01 

变量

变量名=值
name =user
age=1

读取变量内容

${变量名}
${name}
${age}
name="user"
echo name:${name}

取消变量

语法
unset 变量名
unset name;	

数组

数组定义

语法作用
数组名 = (value1 vaule2)创建数组 并一次赋多个值
数组名[索引值] = value给指定位置赋值

数组的读出

语法作用
${ 数组名称[索引值] }查看对应所以处的值,开始值为0
${ 数组名称[@] }查看数组所有元素
${数组名称[@]:1 }从数组下标1开始读取
${数组名称[@]:1:2}从数组下标1开始读取,读取两个元素

示例

#定义数组
array=(A' 'B' 'C')
#读出数组 并打印
echo ${array[0]}

查看数组

语法作用
declare -a查看系统中所有的数组

声明关联数组

类似于map集合

语法作用
declare -A 数组名声音应该关联数组

关联数组赋值

语法作用
数组名称[key] ='value’一次赋值添加一个元素
数组=(key1=value1 key2=value2)一次赋值多个元素

使用示例

#创建关联数组
declare -A array1
#给数组赋值 一次赋值多个
array1=(name='user' age='18')
#一次赋值一个
array[sex]='man'
#打印 array1中的name值
echo ${array1[name]} 

流程控制语句-if判断语句

shell中的运算

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

1.1 数学比较运算

语法说明
-eq等于则为 ture
-gt大于 则为 ture
-lt小于 则为ture
-ge大于或等于则为ture
-le小于或等于则为ture
-ne不等于则为ture

示例

num1=100
num2=200
if test ${num1} -eq ${num2}
then 
echo " 两个数相等"
else 
echo "两个数不相等"
fi

#输出结果:
两个数相等

1.2 字符串比较运算

符号说明
=等于则为ture
!=不相等则为ture
-z 字符串字符串长度为零则为ture
-n 字符串字符串的长度不为零则为ture
var1="user1"
var2="user2"

if test $num1=$num2
then 
    echo "两个字符串相等"
else
    echo "两个字符串不相等"
fi

#输出结果
两个字符串不相等

1.3文件运算

参数说明
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真

示例

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi
#输出结果
文件已存在!

1.4 逻辑运算

参数说明
&&
||
!

1.5赋值运算

参数说明
=赋值

if 语法

2.1单if 语法

if [conition]          #conition 值为true or false
  then                #当条件为真时 执行commands代码块
      commands

fi                   #结束

2.2 if-else 语法

if [conition]          #conition 值为true or false
  then                #当条件为真时 执行commands代码块
      commands
  else                #当条件为假时 执行commands2
      commands2
fi                   #结束

2.3 if-then-elif 语法
使用范围:多于两个以上的判断结果,也就是多于一个以上的判断条件

if [conition1]          #conition1 值为true or false
  then                #conition1 为true时 执行commands1代码块
      commands1

elif [conition2]   
      commands2       #conition2 为true时 执行commands2代码块
  
else                #当条件都为假时 执行commands3代码块
     commands3
fi                   #结束

for循环

for 语法一

for i in 写法

for i in vuale1 vuale2....
do 
         commands
done

for 语法2

C式for命令

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

循环控制

3.1 sleep N 脚本执行到该步休眠N秒

#!/bin/bash
ehco -n "倒计时:"
for i in `seq 9 -1 1`
do 
   echo -n -e "\b$i"  #\b 退格
    sleep 1            #sleep 休眠一秒
    done
    echo
    

3.2 comtinue 跳过循环中的某次循环

示例默认输出1-9 ,但是使用continue 跳过输出5

for((i=1;i<10;i++))
do 
  if[$i -eq 5]
  then 
       continue
   else 
        echo $i
 fi
done   

3.3 break 跳出循环执行后续代码

shell流程控制-while 循环语句

while [ condition ]   # 条件为真while 才会循环,条件为假,while 停止循环

do
           commands
done

until 语句

与while 相反

until [codition] 注意,条件为假until 才会循环,条件为真,until停止循环

do
          commands 代码块

done

case 语法

语法

case 变量 in
 条件1)
       执行代码块1
       ;;
 条件2)
        执行代模块2
        ;;
  esac
 

shell函数

语法一

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

语法二

function 函数名{
   代码块
   return N

}

正则表达式

定位符使用技巧:同时锚定开头和结尾,做精确匹配;单一个锚定开头和结尾,做模糊匹配。

定位符说明
^锚定开头^a 以a开头 默认锚定一个字符
$锚定结尾 a$ 以a结尾 默认锚定一个字符

匹配符:匹配字符串

匹配符说明
.匹配除回车以外的任意字符
( )字符串分组
[ ]定义字符类,匹配括号中的一个字符串
[^ ]表示否定括号中出现字符串类中的字符,取反
\转移字符
|管道符 与 ( )关联使用

限定符:对面前的字符串或者字符串做限定说明

限定符说明
*某个字符之后加星号表示该字符不出现或出现多次
?与星号相似,但表示该字符只出现一次或者不出实现
{n,m}写在某字符之后,表示该字符最少出现n次,最多出现m次
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是杨杨呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值