一、概念
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=10
b=20
c=`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 “$*”; do
echo $i
done
执行脚本,结果如下:
$chmod +x test.sh
$./test.sh 1 2 3
1 2 3
read命令用于获取键盘输入信息:
#read+选项+变量名
选项:
-p“提示信息”:在等待read输入时,输出提示信息。
-t秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间。
-n字符数:read命令只接受指定的字符数
-s:隐藏输入的数据,适用于机密信息的输入
eg:
read -p “输入第一个参数:” a
read -p “输入第二个参数:” b
r=$[a+b]
echo “result=${r}”
结果:
chmod +x ./test.sh
./test.sh
输入1
输入2
result=3