shell基础
一、shell概述
Shell是一种脚本语言
脚本:本质是一个文件,文件里面存放的是特定格式的指令,系统可以使用脚本解析器、翻译或解析指令并执行(shell不需要编译)
Shell既是应用程序又是一种脚本语言(应用程序解析脚本语言)
Shell命令解析器:
系统提供shell命令解析器:sh ash bash
查看自己linux系统的默认解析:echo $SHELL
Shell脚本是一种脚本语言,我们只需要使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行
二、脚本的调用形式
打开终端时系统自动调用:/etc/profile或~/.bashrc
/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置
开机自启动的程序,一般也在这里设置
~/.bashrc
用户自己的家目录中的.bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等
用户手动调用:用户实现的脚本
三、shell语法初识
3.1定义开头
第一行一定是:#!/bin/bash,该命令说明,该文件使用的是bash语法。如果不设置该行,则该脚本不会被执行。以#开头的行为解释说明。Shell脚本通常以sh为后缀,用于区分只这是一个shell脚本
执行1.1编写的脚本
加上可执行权限
三种执行方式(./xxx.sh bash xxx.sh .xxx.sh)
(1)./xxx.sh:先按照文件中#!指定的解析器解析
如果#!指定的解析器不存在,才会使用默认的解析器
- bash xxx.sh:指明先用bash解析器解析
如果bash不存在,才会使用默认解析器
- .xxx.sh直接使用默认解析器解析
3.2变量
定义变量 变量名=变量值
如: num=10
引用变量
$变量名
unset:清除变量值
运行结果
从键盘获取read值
运行结果
读取多个值
运行结果
只读变量
运行结果
环境变量
设置环境变量
使用source命令使文件生效
Source Filename 作用:在当前bash环境下读取并执行Filename中的命令
[root@localhost shell1]# source 1.sh [root@localhost shell1]# env |
使用env查看环境变量中已有DATA
也可在终端读取
[root@localhost shell1]# echo $DATA 666 |
在其他sh脚本读取
[root@localhost shell1]# vi 2.sh #!/bin/bash echo "DATA=$DATA" [root@localhost shell1]# bash 2.sh DATA=666 |
如果想在PATH变量中追加一个路径写法
export PATH=$PATH:/需要添加的路径
预设变量
Shell直接提供无需定义的变量
案例
[root@localhost shell1]# vi 1.sh #!/bin/bash echo "参加的个数=$#" echo "参加的内容=$*" echo "第一个参数:$1" echo "第二个参数:$2" echo "第三个参数:$3" readonly data=10 data=666 echo "data=250的结果:$?" echo "进程名:$0" echo "进程号:$$" |
脚本标量的特殊用法
变量的扩展
判断变量是否存在
#!/bin/bash #${num:-val} 如果num存在,整个表达式的值为num,否则为val echo ${num:-100} #100 num=200 echo ${num:-100} #200 #!/bin/bash # ${num:=val} 如果num存在,整个表达式的值为num,\ #否则为val,同时将num的值赋值为val echo ${num:=100} #100 echo "num=$num" #100 |
3.3字符串的操作
[root@localhost shell1]# vi 1.sh #!/bin/bash str="hehe:haha:xixi:lala" #测试字符串的长度${#str} echo "str的长度为:${#str}" #19 #从下标3为位置提取${str:3} echo ${str:3} #"e:haha:xixi:lala" #从下标为3的位置提取长度为6字节 echo ${str:3:6} #"e:haha" #${str/old/new} 用new替换str中出现的第一个old echo ${str/:/#} #"hehe#haha:xixi:lala" # $ {str//old/new} 用new替换str中所有的old echo ${str//:/#} #"hehe#haha#xixi#lala" |
运行结果
[root@localhost shell1]# bash 1.sh str的长度为:19 e:haha:xixi:lala e:haha hehe#haha:xixi:lala hehe#haha#xixi#lala |
3.4条件测试
test命令:用于测试字符串、文件状态和数字
test命令格式:test condition 或[condition]
文件测试
文件测试:测试文件状态的条件表达式
-e 是否存在 -d 是目录 -f 是文件 -r 可读 -w 可写 -x 可执行
-L 连接符号 -c 是否字符设备 -b 是否块设备 -s 文件非空
#!/bin/bash read -p "请输入一个文件名" filename [ -e $filename ] echo $? [root@localhost shell1]# bash 1.sh 请输入一个文件名1.sh 0 |
字符串测试
[root@localhost shell1]# vi 1.sh #!/bin/bash read -p "请输入一个文件名" filename [ -e $filename ] #!/bin/bash test -z $yn echo $? #0 read -p "please input y/n:" yn [ -z $yn ] echo "1:$?" [ $yn = "y" ] echo "2:$?" |
运行结果
3.5数值测试
#!/bin/bash read -p "请输入第一个数值" data1 read -p "请输入第二个数值" data2 test $data1 -eq $data2 echo "相等:$?" test $data1 -ge $data2 echo "大于等于:$?" [ $data1 -lt $data2 ] echo "小于:$?" |
运行结果
符合语句测试
多重条件判定
原文地址:https://blog.csdn.net/2301_82330629/article/details/142702233
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!