1.Shell

shell初体验
- 第一个shell程序:shell.sh (输出hello world!)
1.编写shell脚本
#!/bin/bash
echo "Hello world!"
2.脚本授权
chmod +x shell.sh
3.执行脚本
sh shell.sh
4.执行结果

5.我们的第一个shell脚本完成,非常简单.
Shell
Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁.
Shell既是一种命令语言,又是一种程序设计语言.
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问系统内核的服务.
第一个shell脚本
我们来创建第一个shell脚本,打开你的文本编辑器,文件命名为shell.sh(扩展名为sh,sh代表shell),扩展名并不影响脚步执行.

然后我们在文本编辑中写入代码

这里的#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.
echo命令用于向窗口输出文本.
接下来,
我执行一下shell脚本
我们cd到相应目录:
chmod + x ./shell.sh #使脚本具有执行权限(或者 chmod 777 shell.sh)
./shell.sh #执行脚本

如果你会了shell输出,恭喜您已经学会了半个shell编程了.
注释
#
表示注释
例如:
#!/bin/bash
#输出了Hello world!
echo "Hello world"
在shell脚本中,没有多行注释,只有单行注释
变量
- 变量名和等号不能够有空格(和我们的一般语言不一样)
name = "niihao2017"
echo $name
#报错:./hello.sh: line l: name: command not found
name="niihao2017"
echo $name
niihao2017
- 变量名首字母必需是字母+下划线也可以(a-z,A-Z)
age=100
_age=200
echo $age
echo $_age
echo "执行了"
200
100
执行了
- 变量名中间不允许有空格
ag e=100
echo $ag e
echo "执行了"
./shell.sh: line 22: ag: command not found
e
执行了
- 不允许变量名使用标点符号
na,me="niihao2017"
echo $na,me
echo "执行了"
./shell.sh: line 26: na,me=niihao2017: command not found
,me
执行了
- 只读变量(类似于通常所讲解常量)
name="Hello"
readonly name
name="niihao2017"
echo "执行了"
./shell.sh: line 33: name: readonly variable
执行了
- 删除变量(unset)
name="tom"
#输出变量值
echo $name
#删除变量
unset name
echo $name
echo "执行了"
tom
执行了
- 位置变量
#给我们脚本文件传递参数
#文件名称
filename=$(0)
echo "文件名称: ${filename}"
#参数一
name=${1}
#参数二
age=${2}
#参数三
sex=${3}
echo "文件名称: ${filename}"
echo "姓名: ${name} 年龄: ${age} 性别: ${sex}"
- 特殊变量
echo ${0}
name = "LK"
echo ${?}
./shell.sh
./shell.sh: line 64: name: command not found
127
${#}->参数个数
echo ${#}
${*}->参数列表
echo ${*}
${@}->参数列表
echo ${@}
$$->当前shell进程ID
echo ${$}
$!->执行上一个指令进程ID(process id)
echo ${!}
字符串
- 字符串->单引号
name = 'tom'
echo ${name}
tom
- 字符串->双引号
name="tom"
echo ${name}
tom
- 字符串->拼接
#方式一
name="tom"
age=100
sex='男'
info="${name} ${age} ${sex}"
echo ${info}
tom 100 男
#方式二
name="tom"
age=100
sex="男"
info="姓名:"${name}" 年龄:"${age}" 性别:"${sex}" "
echo ${info}
姓名:tom 年龄:100 性别:男
- 字符串->截取字符串长度
name = "tom"
echo ${#name}
- 字符串->截取
#语法:${变量名:开始位置:截取长度}
#案例一:从字符串第3个开始截取,截取3个
name="I have a Dream"
result=${name:2:3}
echo ${result}
hav
#案例二:从字符串第5个开始截取,到最后一个结束
#方式一
name = "I have a Dream"
length=${#name}
result=${name:5:length-1}
result=${name:5:${#name}-1}
result=${name:5:${#name}}
echo ${result}
#案例三:0--5截取
name="I have a Dream"
result=${name:5}
echo ${result}
e a Dream
- 字符串->删除
#语法一:${变量名#删除字符串 正则表达式}
#从左边开始检查
#案例一
name="I have a Dream"
result=${name#Dream}
#结果: 匹配不到
echo ${result}}
#案例二
name="I have a Dream"
result=${name#I}
echo ${result}}
#案例三:查找指定字符第一个,并且删除前面所有的字符(包含自己)
name="I have a Dream"
result=${name#*a}
echo ${result}
#案例四:指定删除范围(第一个开始删除,删除到哪里)
name="I have a Dream"
result=${name#I*D}
echo ${result}
#语法二:${变量名##删除字符串 正则表达式}
#从右边开始检查
#作用:从字符串结尾(右边)开始匹配要删除字符串
name="I have a Dream"
result=${name##*a}
echo ${result}
#语法三:${变量名%删除字符串 正则表达式}
#案例一:查找第一个字符
#代码一
#查找不到
name="I have a Dream"
result=${name%a}
echo ${result}
#代码二
#查到了
name="I have a Dream"
result=${name%m}
echo ${result}
I have a Drea
#案例二:查找指定字符第一个,并且删除前面所有字符(包含自己)
name="I have a Dream"
result=${name%h*}
echo ${result}
I
#案例三:指定删除范围
name="I have a Dream"
result=${name%v*r}
echo ${result}
#语法四: ${变量名%%删除字符串 正则表达式}
#案例一:查找指定字符串最后一个,并且删除前面所有的字符(包含自己)
name="I have a Dream"
result=${name%%a*}
echo ${result}
网友评论