一、概念
shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用来Shell来启动、挂起、停止甚至是编写一些程序。
二、脚本执行方式
1.echo[选项][输出内容]
-e:支持反斜线控制的字符转换/b: 退格键,向左删除键/f:换页键/n: 换行符/r:回车键/t:制表符,与Tab键一样/e: escape键\e[1;与\e[0m]颜色输出eg:#echo -e"\e[1;31m abc \e[0m"输出结果:abc(红色)复制代码
2.第一个脚本
#vi hello.sh
#!/bin/bash 标注是Shell脚本
"$"是获取变量的意思
三、bash基本功能——历史命令与补全
#history【选项】【历史命令保存文件】
选项:-c:清空命令
-w:把缓存中的历史命令写入历史命令保存文件~/.bash_history
历史命令的调用:
- 使用上、下箭头调用以前的历史命令
- 使用“!n”重复执行第n条历史命令
- 使用“!!”重复执行上一条命令
- 使用“!字串”重复执行最后一条以该字串开头的命令
四、别名与快捷键
1.命令别名:
#alias 别名=‘原命令’
#设定命令别名
#alias
#查询命令别名
- 别名永久生效#vi /root/.bash rc
五、多命令顺序执行与管道符
; 命1;命2 没有逻辑联系&& 命1&&命2 逻辑与(命1执行,命2才执行),反之。|| 命1||命2 逻辑或(命1执行,命2不执行),反之。复制代码
- #命令 && echo yes || echo no(判断命令是否正确)
- #命令1||命令2(#命令1的正确输出作为命令2的操作对象)
- #grep[选项] “搜索内容” 文件名(选项:-i:忽略大小写)(-n:输出行号)(-v:反向直线)(--color=auto:搜索出的关键字用颜色显示)
六、通配符和其他特殊符号
? 匹配一个任意字符* 匹配0个或任意多个字符[] 匹配任意一个字符[abc]或a,或b,或c[-] “-”代表范围[^] 逻辑非,[^0-9]匹配一个不是数字的字符$ 获取变量的命令符号复制代码
单引号括起来的内容,输出还是原内容。 双引号括起来的内容,输出是它的正确值。 \ 转义符 后面的特殊符号失去意义变为普通字符
七、用户自定义变量(当前)
定义:变量是计算机内存的单元,其中存放的值可以改变。变量类型默认是字符串类型。
- 将变量设为不可更改的命令:readonly
- 设置环境变量(子shell)
export 变量名=变量值 #申明变量env #查询变量unset 变量名 #删除变量复制代码
- PATH:系统查找命令的途径(#PATH=“$PATH”:/root)PATH变量叠加
- 位置参数变量
$n(${10}) $*(输出一个整体) $@(区分对待,输出每一个) $#(所有参数的个数)复制代码
- 预定义变量
$? 最后一次执行的命令的返回状态。“0”为正确$$ 当前进程的进程号(PID)$! 后台运行的最后一个进程的进程号(PID)复制代码
八、数值运算与运算符
1、declare声明变量类型
#declare[+|-][选项]变量名-: 给变量设定类型属性+: 取消类型属性-i: 变量声明为整数型(integer)-x: 变量声明为环境声明-p: 显示指定变量的被声明的类型复制代码
加法运算(数值运算方法)
例1:
#declare -i cc =$aa+$bb#echo $cc结果:33复制代码
例2:
#dd=$(expr $aa + $bb)#echo $dd结果:33复制代码
例3:
#ff=$(($aa+$bb))#echo $ff结果:33复制代码
#!/bin/bash
val=`expr 2 + 2'
echo "两数之和为 : $val"
1.表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
2.完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
eg:
a=10b=20c=`expr ${a} + ${b}`echo "$c"复制代码
优先级:
- 最大为13.(单目负、单目正),最小为(赋值、运算)
- 虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级。
- 逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0.
九、变量测试与内容替换
x=${y-新值}
变量y没有设置(x=新值)
变量y为空值(x为空)
变量y设置值(x=$y)
十、Shell变量
Vi+文件名;touch+文件名;
Shell数组:
定义一个数组:my_array=(A B C D)
输出数组的第一位:echo ${my_array[1]}
获取数组中的所有元素:${my_array[*]}
获取数组的长度:${#my_array[*]}
Shell变量:
1.注意:变量名和等号之间不能有空格。
2.只读变量命令:readonly
3.删除变量命令:unset
Shell字符串:
- 拼接字符串长度
1.greeting=“hello,“$you_name””
2.greeting_1=“hello,${you_name}”
- 获取字符串长度
eg:string=“abcde”
echo $string 结果:abcde
echo ${#string} 结果:5
- 提取子字符串
eg:string=“runoob is a great site”
echo ${string:1:4}
结果:unoo
- 查找子字符串 eg:string=“runoob is a great company”
echo expr index "$string"is
传递参数:
定义: 向脚本传递参数,脚本内获得参数的格式为:$n,n代表一个数字,1为执行脚本的第一个参数,2为执行脚本的第二个参数,以此类推.....
echo“Shell传递参数实例!”;echo“执行的文件名:$0”;echo“第一个参数为:$1”;echo“第二个参数为:$2”;复制代码
为脚本设置可执行权限,并执行脚本:
#chmod +x test.sh#./test.sh 1 2 或者 #sh.test.sh结果:Shell传递参数实例!执行的文件名:./text.sh第一个参数为:1第二个参数为:2复制代码
for语句:(一个参数)
for i in “$*”; doecho $idone执行脚本,结果如下:$chmod +x test.sh$./test.sh 1 2 31 2 3复制代码
read命令用于获取键盘输入信息:
#read+选项+变量名
选项:
-p“提示信息”:在等待read输入时,输出提示信息。
-t秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间。
-n字符数:read命令只接受指定的字符数
-s:隐藏输入的数据,适用于机密信息的输入
eg:
read -p “输入第一个参数:” aread -p “输入第二个参数:” br=$[a+b]echo “result=${r}”结果:chmod +x ./test.sh./test.sh输入1输入2result=3复制代码