@huangyichun
2017-09-15T09:31:16.000000Z
字数 2937
阅读 1044
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: 当前的shellTERM: 终端环境HISTSIZE: 历史命令条数SSH_CLIENT: 当前操作环境是用ssh链接的,这里记录客户端ipUSER: 当前登录的用户PATH: 系统查找命令的路径
$n : n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,10以上的参数需要用大括号包含,如${10}.例如:vim locate.sh 文件//内容---------#!/bin/bashnum1=$1 //代表下面的2num2=$2 //代表下面的3sum=$(( $num1 + $num2 ))echo $sum//----------------使用命令: ./locate.sh 2 3输出结果:5$* : 这个变量代表命令行中所有的参数,$*把所有的参数看成整体区分对待$@ : 这个变量代表命令的所有的参数,不过$@ 把每个参数区别对待$# : 这个变量代表命令行中所有参数的个数例如: 创建文件: cangshu2.sh#!/bin/bashecho "\$*输出参数是: $*"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 "$*"doecho "The parameters is: $i"done//$@中的每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几次for y in "$@"doecho "Parameter : $y"done运行: ./for.sh 1 2 3 4 5输出结果:The parameters is: 1 2 3 4 5Parameter : 1Parameter : 2Parameter : 3Parameter : 4Parameter : 5
$? : 上条命令正确执行输出0,上条命令不正常执行输出非0$$ : 当前进程的进程号(PID)$! : 后台运行的最后一个进程的进程号(PID)
read 选项 变量名选项:-p "提示信息" : 在等待read输入时,输出提示信息-t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间-n 字符数: read命令只接受指定的字符数,就会执行-s :隐藏输入的数据,适用于机密信息的输入例如:#!/bin/bashread -p "请输入你的名字: " -t 30 nameecho $nameread -p "请输入的密码: " -s passwordecho $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的操作对象
