@huangyichun
2017-09-15T17:31:16.000000Z
字数 2937
阅读 893
linux
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
Bourner Shell
从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。
C Shell
C Shell主要在BSD版的Unix系统中使用,其语法和C语言类似而得名
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、Ksh、Bash、psh、zsh;C家族主要包括: csh、tcsh
echo 选项 输出内容
选项: -e //支持反斜线控制的字符转换
控制字符 :
\b //退格键
\n //换行
\r //回车键
\t //制表符,也是tab键
- 在Bash中,变量的默认类型都是字符串型
用户自定义变量
环境变量
这种变量中主要保存的是和系统操作环境相关的数据.变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的.
变量调用 $变量:调用变量的值
set查看变量
环境变量是全局变量,自定义变量是局部变量
对系统生效的环境变量名和作用是固定的
export 变量名=变量值 //用户自定义的环境变量
//常用环境变量
HOSTNAME : 主机名
SHELL: 当前的shell
TERM: 终端环境
HISTSIZE: 历史命令条数
SSH_CLIENT: 当前操作环境是用ssh链接的,这里记录客户端ip
USER: 当前登录的用户
PATH: 系统查找命令的路径
$n : n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,10以上的参数需要用大括号包含,如${10}.
例如:
vim locate.sh 文件
//内容---------
#!/bin/bash
num1=$1 //代表下面的2
num2=$2 //代表下面的3
sum=$(( $num1 + $num2 ))
echo $sum
//----------------
使用命令: ./locate.sh 2 3
输出结果:5
$* : 这个变量代表命令行中所有的参数,$*把所有的参数看成整体区分对待
$@ : 这个变量代表命令的所有的参数,不过$@ 把每个参数区别对待
$# : 这个变量代表命令行中所有参数的个数
例如: 创建文件: cangshu2.sh
#!/bin/bash
echo "\$*输出参数是: $*"
echo "\$@输出参数是: $@"
echo "\$#输出参数是: $#"
执行: chmod 755 cangshu2.sh
./cangshu2.sh 1 2 3 4 5
输出:
$*输出参数是: 1 2 3 4 5
$@输出参数是: 1 2 3 4 5
$#输出参数是: 5
$*与$@的区别:
例如: for.sh
#!/bin/bash
//$*中的所有参数看成一个整体,所以这个for循环只会循环一次
for i in "$*"
do
echo "The parameters is: $i"
done
//$@中的每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几次
for y in "$@"
do
echo "Parameter : $y"
done
运行: ./for.sh 1 2 3 4 5
输出结果:
The parameters is: 1 2 3 4 5
Parameter : 1
Parameter : 2
Parameter : 3
Parameter : 4
Parameter : 5
$? : 上条命令正确执行输出0,上条命令不正常执行输出非0
$$ : 当前进程的进程号(PID)
$! : 后台运行的最后一个进程的进程号(PID)
read 选项 变量名
选项:
-p "提示信息" : 在等待read输入时,输出提示信息
-t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数: read命令只接受指定的字符数,就会执行
-s :隐藏输入的数据,适用于机密信息的输入
例如:
#!/bin/bash
read -p "请输入你的名字: " -t 30 name
echo $name
read -p "请输入的密码: " -s password
echo $password
locale //查询当前系统语系
-LANG: 定义系统主语系的变量
-LC_ALL: 定义整体语系的变量
alias //查看系统中所有命令的别名
alias 别名='原命令'
vi ~/.bashrc //写入环境变量配置文件,别名永久生效
unalias 别名 //删除别名
ctrl + c //强制终止当前命令
ctrl + l //清屏
ctrl + a //光标移动到命令行首
ctrl + e //光标移动到命令行尾
ctrl + u //从光标所在位置删除到行首
ctrl + z //把命令放入后台
ctrl + r //在历史命令中搜索
history 选项 历史命令保存文件
选项:
-c //清空历史命令
-w //把缓存中的历史命令写入历史保存文件~/.bash_history
//历史命令的调用
1.使用上下箭头调用以前的历史命令
2.使用"!n"重复执行第n条历史命令
3.使用"!!"重复执行上条命令
4.使用"!字符串"重复执行最后一条以该字符串开头的命令
设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出
类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定文件或设备中
命令 >> 文件 以追加的方式,把命令的正确输出输出到指定文件或设备中
标准错误输出重定向 错误命令 2>文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备中
错误命令 2>> 文件 以追加的方式,把命令的错误输出输出到指定的文件或设备中
正确输出和错误输出同时保存
在只显示结果的内容中,将过程命令直接删除不显示
wc 选项 文件名
选项 :
-c 统计字节数
-w 统计单词数
-l 统计行数
命令1 : 命令2 //多个命令顺序执行,命令之间没有任何逻辑连续
命令1 && 命令2 //命令1正确执行,则命令2才会执行
命令1 || 命令2 //命令1不正确执行,命令2才会执行,命令1正确执行,命令2不执行.
命令1 | 命令2 //命令1的正输出作为命令2的操作对象