Shell基本知识
来源:互联网 发布:linux 统计大文件行数 编辑:程序博客网 时间:2024/06/05 08:14
Shell是什么
- Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以使用Shell来启动、挂起、停止甚至编写一些程序。
- Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
Shell的分类
- Shell的梁总主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh。
- Bourne Shell
从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh,非常古老,功能简单的shell。 - C Shell
C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名。
- Bourne Shell
Bash
Bash 与 sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。Linux中Shell
- 使用
echo $SHELL
查看当前shell。 - 使用
vim /etc/shells
查看Linux支持的shell 。
- 使用
alias别名
- 使用
alias
命令查看当前shell别名
// #aliasalias ll='ls -l --corlor=auto'...
- 在当前shell中设置
临时
别名alias alias_name='origin_name'
// #alias vi='vim'#vi //实际执行vim
- 删除别名
unalias alias_name
#unalias vi
-当前用户永久配置别名 vi ~/.bashrc
#vi ~/.bashrc// 添加别名,并保存退出alias vi='vim'// 重新加载.bashrc文件到当前shell#source ~/.bashrc
- 别名生效顺序
- 命令生效顺序
- 执行用绝对路径或相对路径的命令
- 别名
- Bash内部命令
- $PATH环境变量定义的目录查找顺序找到的第一个命令
- 命令生效顺序
注:别名的优先级高于系统中默认命令
常用快捷键
- Ctrl+C 强制终止当前命令
- Ctrl+l 清屏
- Ctrl+a 光标移动到命令行首
- Ctrl+e 光标移动到命令行首
- Ctrl+u 从光标所在位置删除到行首
- Ctrl+z 把命令放入后台
- Ctrl+r 在历史命令中搜索
历史命令
history [选项] [历史命令保存文件]
- options
-c : 清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件~/.bash_history
注: history中历史命令为上次登录时使用的命令,可以使用-w同步写入这次登录后使用的命令
- 历史命令默认会保存1000条,可以在环境变量配置文件
/etc/profile
中修改HISTORYSIZE
值
历史命令的调用
- 使用上、下箭头调用以前的历史命令
- 使用“!n”重复执行第n条历史命令
- 使用“!!”重复执行上一条命令
- 使用“!字串”重复执行最后一条以该字符串开头的命令
Tab键补全
使用Tab键补全命令或文件名,一次Tab键未补全时,再次Tab键显示多个补全后命令或文件后从中选择使用的命令或文件,但有时没有该命令或文件时无法完成补全。
**注:**Tab键使用$PATH环境变量中给定的可执行文件的搜索路径中搜索命令
Bash中其他特殊符号
"$"
符号,而不当做是变量引用Shell变量
Shell中变量命名规则
- 变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线组成
- 变量名的长度不得超过255个字符
- 变量名在有效的范围内必须是唯一的
- 在Bash中,变量的默认类型都是字符串型
变量的分类
- 用户自定义变量
变量自定义的。 - 环境变量
主要保存和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量的作用是固定的。 - 位置参数变量
主要用来想脚本当中传递参数或数据,变量名不能自定义,变量作用是固定的,也是预定义变量的一种。 - 预定义变量
Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
定义变量
// 变量名=变量值#x=5 // 注:其间不能有空格 例如x= 5、x =5、x = 5等// 打印变量#echo $x#echo ${x}
变量叠加
#x=123#x="$x"456#x=${x}789
变量查看
set可以查看系统下所有变量,包括环境变量和用户变量
// 查看所有变量#set// 设置此选项,调用未声明变量时报错(默认情况下无任何提示)#echo $a#set -u#echo $a-bash: a: unbound variable
变量删除
unset 变量名
// 删除变量,变量名前不能加$#unset a
环境变量
环境变量和用户自定义变量的区别? 用户自定义变量只能在当前shell中生效
环境变量在当前shell和这个shell的所有子shell中生效
// 进入子shell# bash// 查看当前进程树# pstree|-...|-bash--bash--pstree...// 退出子shell# exit# pstree|-...|-bash--pstree...
// 当前shell中定义a# a=5# echo $a5// 进入子shell# bash# pstree|-...|-bash--bash--pstree...// 无法查看父shell中的自定义的变量a# echo $a# eixt// 父 shell 中声明环境变量 a,子shell可以看到父shell中的变量# export $a# bash// 子shell中查看变量a# echo $a5// 子shell无法删除父shell定义环境变量a# unset a # exit// 父shell删除声明的环境变量a# unset a
查看环境变量
- set
查看所有变量,包括用户自定义变量和系统环境变量 - env
仅用来查看环境变量
PS1环境变量
PS1变量:命令提示符设置
- \d:显示日期,格式为 “星期 月 日”
- \H:显示完整的主机名。如默认的主机名”localhost.localhost”
- \t:显示24小时制时间,格式为“HH:MM:SS
- \A:显示24小时制时间,格式为“HH:MM”
- \u:显示当前用户名
- \w:显示当前所在目录的完整名称
- \W:显示当前所在目录的最后一个目录
- $:提示符。如果root用户会显示提示符为“#”,如果普通用户会显示提示符“$”
# echo $PS1[\u@\h \W]\$
PS2 定义换行提示符如下代码中的“>”
# ls \>~
当前语系
locale命令查看当前语系
- LANG:定义系统主语系的变量
- LC_ALL:定义整体语系的变量
// 查看系统当前语系# locale...# echo $LANG// 查看Linux系统支持的所有语系# locale -a |more
查询系统默认语系
cat /etc/sysconfig/i18n,下次开机启动后系统进入的是默认语言环境
# cat /etc/sysconfig/i18nLANG="zh_CN.UTF-8"
Linxu中文支持
前提条件,正确安装中文字体和中文语系
- 有图形界面,可以正确支持中文显示
- 第三方远程工具,只要语系设定正确,就可以支持中文显示,XShell选择中文显示
- 纯字符界面,必须使用第三方插件(如zhcon等)
位置参数变量
// 固定参数个数的求和shell脚本#/bin/bashnum=$1num=$2sum=$(( $num1 + $num2 ))echo $sum
// $*和$@的区别,保存为param.sh#!/bin/bashfor i in "$*" do echo $i donefor i in "$@" do echo $i done# chmod u+x param.sh# ./param.sh 1 2 3 41 2 3 41234
预定义变量
read
- options
- -p “提示信息”:在等待read输入时,输出提示信息
- -t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
- -n 字符数:read命令只接受指定字符数,就会执行
- -s:隐藏输入的数据,适用于机密信息的输入
Shell运算符
shell变量的缺点?
- shell变量是弱类型
- 默认变量都是字符串
declare声明变量类型
declare来指明声明的变量类型
declare [+/-][option] 变量名
options:
- -:给变量设定类型属性
- +:取消变量的类型属性
- -a:将变量声明为数组型
- -i:将变量声明为整数型
- -x:将变量声明为环境变量
- -r:将变量声明为只读变量
- -p:显示指定变量的被声明的类型
// shell变量默认为字符串# aa=11# bb=22 # cc=$aa+$bb# echo $cc11+22// 明确声明变量类型# declare -i cc=$aa+$bb // 自动转换了$aa、$bb为整型变量参与运算# echo $cc33// 查看指定变量的属性# declare -p ccdeclare -i cc="33"
// 定义数组,shell脚本能够自动检测出这个movie变量是数组# movie[0]=zp# movie[1]=tp# declare -a movie[2]=live # echo ${movie}# echo ${movie[2]}# echo ${movie[*]}
// export 调用 declare -x 变量 来声明环境变量# bb=2# export bb// export真正调用是declare -x bb=2# declare -x bb=2// 查看所有的环境变量#declare -p...declare -x bb=2...
// 只读属性,变量不能重新赋值、删除、取消只读属性,一般不使用只读属性# declare -rx test=123# test=456-bash: test: readonly variable# unset test-bash: test: cannot unset: readonly variable# declare +r test-bash: declare: test: readonly variable
数值运算方法
// 上节中数值计算的方式求cc的数值比较复杂,可以使用下面方式# aa=1# bb=2# dd=$(expr $aa + $bb) // 注:$aa和$bb和+ 之间有空格# echo $dd// 上面的方式也很复杂# aa=1# bb=2# dd=$(($aa+$bb))# dd=$[$aa+$bb]
运算符的优先级
注:这里数值越大,优先级越高
变量测试
注:变量测试方式十分简洁但逻辑复杂,也不好记,实际工作中可以查阅;可以使用其他方式实现相同测试结果即可。
参考
慕课网Linux相关视频
注
此文章节选慕课网Linux视频内容作为笔记
0 0
- Shell基本知识
- shell基本知识
- Shell基本知识
- Shell基本知识
- shell基本知识
- shell的一些基本知识
- Shell 入门基本知识
- SHELL 脚本基本知识
- shell编程基本知识
- Shell脚本的基本知识
- Shell编程基本知识
- Shell 脚本语言基本知识
- Shell脚本常识(基本知识)
- shell基本知识 - 变量、运算符
- shell系统学习一--基本知识
- shell学习二-----变量基本知识
- Shell脚本常识(基本知识)
- shell基本知识(1)--脚本参数
- 第十五周项目2—洗牌
- (x&y)+((x^y)>>1)
- 多线程与异步的区别
- Volley网络请求封装之LruCache源码分析
- 线程池ThreadPoolExecutor参数设置
- Shell基本知识
- java 提取json格式中的某一id值,拼接成字符串
- iOS中 iOS10 权限崩溃问题 韩俊强的CSDN博客
- aac+h264封装MP4 写文件,效率高.
- [从头读历史] 第259节 左传 [BC722至BC718]
- 获取NVIDIA显卡的温度
- 面向对象
- thinkphp3.2【跨控制器调用】
- 基于UDP协议的网络程序