Shell是用户和linux操作系统沟通的桥梁,使用shell可以完成更复杂的系统管理工作
1、Linux的shell 默认为Bourne Again Shell 简称 bash
编写shell程序的步骤:
(1)创建以.sh为扩展名的文件
vim hello.sh
(2)编辑脚本文件
#!开头声明shell的全路径 如#!/bin/bash
Shell的注释 以#开头 类似于js的 //
(3)增加脚本文件执行权限
chmod +x 脚本名称 #所有用户均对脚本有执行权限
chmod 755 脚本名称 #用户所有者对该脚本具有完全的权限,其他人对该脚本有执行权限
(4)运行脚本文件
进入脚本文件目录执行
./脚本名 执行
2、Shell脚本中变量的定义
(1)Shell脚本中变量名可以由字母、数字、下划线组成,但数字不能作为第一个字符
(2)通过赋值符等号“=” 来定义一个变量的值(=左右不加空格)
var='zifu' #字符串类型,不解析任何字符 单引号是字符串
var="$jiexi" #双引号内部会解析$和反斜杠特殊字符 双引号会内部解析
var=123 #数字不需要加引号
var=`命令` #返回执行的系统命令 var=`ifconfig`
Shell的变量类型只有字符串,在不加引号的情况下,要保证变量的值不包括特殊符号
3、Shell脚本中变量的引用
(1)使用 $加变量名,来引用一个变量的值。
name = 'zifu'
echo $name
echo ${name}
{}是可选的,加{}是为了帮助解译器识别变量的边界,如:
name = 'zifu'
echo "my name is ${name}aaa"
4、Shell中的环境变量
- 环境变量一般是指操作系统中用来指定操作系统运行环境的一些参数,
- 常见的环境变量
-
env 查看所有环境变量
Shell中的局部变量
- shell脚本中由用户自定义的变量
- 重新登录后清空
PATH:系统路径
HOME:当前用户的主目录
HISTSIZE:保存历史命令记录的条数
LOGNAME:当前用户登录名
HOATNAME:主机名
SHELL:当前用户是哪种shell
LANG/LANGUGE:和语言相关的环境变量
MAIL:当前用户的邮件存放目录
5、Shell中的与定义变量
用户只能使用预定义变量,而不能重定义,预定义变量都是由$符合另一个符号组成
(1)常用的shell预定义变量
$# 位置参数的数量
$* 所有位置参数的内容
$? 命令执行后返回的状态 0表示成功非0表示失败
$$ 当前进程的进程号
$! 后台运行的最后一个进程号
$0 当前执行的进程名
6、Shell中的输入和输出
(1)echo输出
echo可以输出变量,数据是采用字符串的样式
echo的两个参数:
echo -e:识别输出内容里的转义字符如:echo -e “asd\tzxc”
echo -n忽略结尾的换行
(2)printf:
printf可以按照格式输出变量
Printf默认没有换行,换行需要自己加”\n” 如:printf “%s\n” asd
(3)read命令读取标准输入设备的下一行,标准输入中的新一行到换行符之前的所有字符会被读取,并赋值给对应的变量
read xxx
echo “我的 $xxx”
(6) <<重定向符
<<!
!
7、Shell脚本的运算比较
(1)let整数运算
let 变量名=变量1运算符变量2
+ - * / %(取余)
let i++
(2)expr整数运算(可操作字符串)
变量名=`expr 变量1 + 变量2` (需要``需要加空格)
+ - *(需要写成 \*) / %(取余)
(3)bc 浮点运算
变量名=`echo "scale=精确位数;53*2" | bc`
(4)expr 字符串的运算
输出字符串长度:echo ${#变量名}或者 expr length $变量名
取字符串的操作:expr substr $变量名 开始(从1开始) 长度或者echo ${变量名:开始(从0开始): 长度}
字符串的拼接:变量="${变量名},${变量名}"
(5)test 比较操作
整数比较:-eq 等于,-ne不等于,-gt 大于 ,-ge大于等于,-lt小于,-le 小于等于
逻辑比较
逻辑与: -a 格式: [变量 –a 变量]
逻辑或: -o 格式: [变量 –o 变量]
逻辑否: ! 格式: [! 变量]
7、顺序结构定义
掌握常见的系统变量的含义:
$0:当前脚本名称
$n:传递给脚本或者函数的参数
$#:传递给脚本或者函数的参数个数
$*:传递给函数的所有参数
$@:传递给函数的所有参数
$?上个命令的退出状态
$$:当前Shell进程ID
变量名 | 说明 | 变量名 | 说明 |
HOME | 当前用户主目录 | PWD | 用户的当前目录 |
PATH | 命令搜索路径 | UID | 当前用户标识符 |
LOGNAME | 用户登录名 | TERM | 终端的类型 |
PS1 | 第一命令提示符,是#或$ | SHELL | 用户的shell类型以及路径 |
PS2 | 第二命令提示符,默认是> | HISFILE | 存储历史命令的文件 |
交互式输入与输出程序的编写:read
read -p “提示信息:" 变量