Shell基础

267 阅读3分钟

一、概念

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