【Shell】shell基础-符号

shell特点:

  • 解释非编译型
  • 弱类型
  • 执行模式:交互/批处理模式

第一个shell脚本

vim first.sh
#!/bin/bash            
echo "hello world!"

注意

  • #!叫做“”shebang“是一个约定的标记,告诉系统这个脚本使用哪一种shell。
  • echo命令用于向窗口输出文本

执行方式4种:

    1.
chmod +x test.sh

执行

./test.shm
  1. ./的含义是就在当前目录中找
  2. 执行本质原理:shell会fork一个子进程并调用exec执行./first.sh这个程序,exec系统调用应该把子进程的代码段替换成./first.sh程序的代码段,并从它的_start开始执行。然而first.sh是个文本文件,根本没有代码段和_start函数!咋办?exec还有另一种机智:如果要执行的是一个文本文件,并且第一行用shebang指定了解释器,则用解释器程序的代码段替换当前进程,并从解释器的_start开始执行,而这个文本文件被当做命令行参数传给解释器。
  3. 2.
/bin/bash test.sh   #作为解释器参数,直接运行解释器
    3.
bash shell.sh

4.

sh shell.sh

注意:

- shell.sh是子进程执行

source shell.sh

是让父进程执行,不创建子进程

shell中的变量:

1. 数字、字符串:

myint=100    #等号两侧不能有空格
echo $myint  #访问变量

mystr=hello
echo ${mystr}world  #字符串拼接,用{ }表示变量名

readonly mystr=hehe  #这个变量不允许修改
unset mystr
export myval =hehe #创建了一个环境变量,可被子进程继承

2.字符串表示:

"hello"  'hello'  hello

3.字符串拼接:

hello="hello" 
world="world"
echo $helloworld

4.获取一个字符串的长度

str='hehe'
echo ${#str}  # #为长度

5.取子字符串

str="hehehehe"
echo ${str:2:4}   #{变量名字:从第二个开始取:取4个}

6.通配符

*   # 匹配0个或多个任意字符# 匹配一个任意字符
[若干个字符]  # 匹配方括号中任意一个字符的一次出现

for i in{1..100}
do
touch file.$i
done
ls file.* 
或 ls file.[13579]* 
或 ls file.[1-5]* 
或 ls file.?

7.命令代换

date  #显示时间
1. today=`date +"%y%m%d  %H:%M:%S"`    #`` 反引号
2. today=$(date+"%m%d")

8.算术代换

a=1
b=1
c=$(($a+$b))   #(())  括号中的语法类似C语言
echo $c

9.转义字符

\0 \1 \2
touch \$\ \$      #$ $
显示  -  :--  -

猜你喜欢

转载自blog.csdn.net/weixin_38682277/article/details/80569388