Linux学习
shell概述
shell脚本的执行
Bash的基本功能
Bash的变量
Bash的运算符
环境变量配置文件
1、shell概述
shell是一个命令行解释器,它为用户提供了一个像Linux内核发送请求以便运行程序的界面系统程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。
硬件——内核——shell命令解释器——外层应用程序
Shell还是一个功能强大的编程语言,易编写,易调试、灵活性较强。Shell是结实执行的脚本语言,在shell中可以直接挑用Linux系统命令。
2、Shell分类
Bourne Shell:从1979年器Unix就开始使用,主文件名为sh
sh、 ksh、 psh、zsh、Bash
C Shell: 主要是在BSD版的Unix使用,其语法和C语言类似。
csh tcsh
3、Linux支持的Shell
/etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
sh
sh-4.1# exit
vim passwd
1,echo输出命令
echo “hello world”
echo ‘hello world!’
echo -e 支持反斜线的字符转换
\\输出\本身
\a输出警告音
\b退格键
\c 取消输出行末的换行符
\eESCAPE键
\f 换页符
\n换行符
\r回车键
\t制表符
\v垂直制表符
echo -e “ab\bc”
echo -e “a\tb\tc\nd\tc\tf”
a b c
d e f
echo -e "\e[1;31m abcd \e[0m"
#输出颜色
30m 黑色 31m 红色 32m 绿色 33m 黄色
34m蓝色 35m洋红 36青色 37白色
第一个脚本
vi hello.sh
#!/bin/Bash 以下写的为shell脚本
#The first program
#Author:will(E-mail: )
echo -e "Mr. will is jdsjhn "
脚本执行
1,赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
2,通过Bash调用执行脚本
bash hello.sh
windows回车符:^M$
Linux回车符:$
dos2unix hello.sh
安装dos2unix包
yum -y install dos2unix
unix2doc hello.sh
Bash的基本功能
历史命令与命令补全
命令别名与常用快捷键
输入输出重定向
多命令顺序执行与管道符
通配符与其他特殊符号
历史命令与命令补全
history 选项 历史命令保存文件
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件
~/.bash_history
vi /.bash_history
默认保存1000条,可以在环境变量配置文件/etc/profile修改
HISTSIZE=1000
生效必须重新登录
历史命令的调用
使用上下箭头调用以前的历史命令
使用!n重复执行第n条历史命令
使用!!重复执行上一条命令
使用!字串 重复执行最后一条以该字串开头的命令
命令与文件补全
Tab
按两下tab,如果后边很多
命令别名与常用快捷键
命令别名
alias 别名=‘原名’
alias vi=‘vim’
alias #查看别名
alias ll=‘ls -l --color=auto’
命令执行时顺序
第一顺位执行用绝对路径或相对路径执行的命令
第二顺位执行别名
第三顺位执行Bash的内部命令
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
环境变量
echo $PATH
系统用PATH做了一个简化工作
让别名永久生效
vi /root/.bashrc
删除别名
unalias 别名
Bash常用快捷键
ctrl+a 把光标移动到命令行开头。如果我们输入的命令过长,想要吧光标移动到命令行开头
ctrl+e 把光标移动到命令行结尾
ctrl+c 强制终止当前的命令
ctrl+l 清屏
ctrl+u 删除或剪切光标之前的命令。
ctrl+k 删除或剪切光标之后的命令
ctrl+y 黏贴ctrl+u或者ctrl+k剪切的内容
ctrl+r 在历史命令中搜索,按下ctrl+r后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。
ctrl+d 退出当前终端 logoff
ctrl+z 暂停
ctrl+s 暂停屏幕输出
ctrl+q 回复屏幕输出
输入输出重定向
1,标准输入输出
设备 设备文件名 文件描述符 类型
键盘 /dev/stdin o 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/sdterr 2 输出错误输出
2;输出重定向
给管理员来看
类型 符号 作用
标准输出重定向 命令>文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备中 date>abc
命令》文件 以追加的方式,把命令的正确输出输出到指定的文件或设备中 date>>abc
标准错误输出重定向 错误命令 2>文件 以覆盖的方式,把命令的错误输出输出到指定的文件或者设备中lst 2>abc
错误命令 2》文件 以追加的方式,把命令的错误输出输出到指定的文件或设备中 lst 2>>abc
正确输出和错误输出同时保存
命令>文件 2 >&1
命令>>文件 2 >&1 lst>>abc 2>&1
命令 &>文件
命令 &>>文件 lst &>>abc
命令>>文件1 2>>文件2#分开保存 ls >>def 2>>efg
ls &>/dev/null #丢进垃圾箱
定时任务
输入重定向
wc 选项 文件名
-c 统计字节数
-w 统计单词书
-l 统计行数
wc <anaconda-ks.cfg
多命令顺序执行与管道符
多命令顺序执行
多命令执行符 格式 作用
; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系 ls;cd /user;date dd if=输入文件 of=输出文件 bs=字节数 count=个数
&& 命令1&&命令2逻辑与 ls &&echo “yes”
当命令1正确执行,则命令2才会执行./configure&&make&&make install
当命令1执行不正确,则命令2不会执行
丨丨 命令1丨丨命令2 逻辑或 ls gahhhs丨丨echo no
当命令1执行不正确,则命令2才会执行命令&&echo yes 丨丨echo no
当命令1执行正确,则命令2不会执行
管道符
丨
命令1 丨命令2
命令1的正确输出作为命令2的操作对象
ll -a /etc 丨 more #分屏显示ll命令结果
netatat -an 丨grep “ESTABLISHED”正常连接
grep 搜索出的关键字颜色显示 grep “root” /etc/passwd
-i 忽略大小写
-n 输出行号
-v 反向查找
--color=auto 找出来的关键字颜色显示
netstat 网络连接状态
通配符和其他特殊符号
? 匹配任意一个字符
* 匹配多个字符
[] 匹配中括号中任意一个字符。[abc] a b c
[-] 匹配中括号中任意一个字符,-代表范围。例如[a-z]代表匹配一个小写字母
[^-] 匹配不是中括号中的一个字符。[^0-9]
cd /temp/
rm -rf *
touch abc
touch abcd
touch 012
touch 0abc
ls ?abc
ls [0-9]*
ls [^0-0]*
‘’ 单引号 都是普通字符
"" 双引号 会识别特殊字符
·· 反引号 系统命令
$() 引用系统命令 $(date)
#注释
$用于调用变量的值,$namename=will
\ 转义符 跟在转义符之后的特殊符号失去特殊含义,变为普通字符。
echo $(date)
echo ‘$(date)’
echo “$(date)”
Bash的变量
用户自定义变量
环境变量
位置参数变量
预定义变量
什么是变量
变量是计算机内存的单元,其中存放的值可以改变。
变量名不能有数字开头
默认类型为字符串型 ,如果需要数值运算,西药指定变量类型为数值型
变量用等号连接,不能有空格
变量的值如果有空格,需要用单引号双引号
变量的值可以使用转义符
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含$变量名 后用${变量名}包含
如果是吧命令的结果作为变量值赋予变量,$(date)
环境变量名建议大写,便于区分
变量的分类
用户自定义变量:
环境变量:
这种变量中主要保存的事和系统操作环境相关的数据
位置参数变量:
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
预定义变量:
是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
用户自定义变量
变量定义
name=“will”
echo $name
aa=123
bb=456
echo $aa
变量叠加
aa=“$aa”456
echo $aa
123456
aa=${aa}789
echo $aa
123456789
set 查看所有变量
unset bb 变量删除
环境变量
用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效,那么这个环境变量就会在所有的Shel中生效。
设置环境变量
export 变量名=变量值
申请变量
env
查询变量
unset
删除变量
父shell ;bash
子shell bash
pstree#确定进程数
name=will
export age=18
sex=man
export sex
set#查看变量 env 看不到PS1
unset age#删除age变量
系统常见环境变量
PATH:系统查找命令的路径
[root@localhost~]#echo $PATH
/usr/lib/qt-3.3/bin:/sbin...
PATH=“$PATH”:/root
#变量叠加
先在这些路径中查找,如果没有则报错。
Tab键的补全也是依靠改路径
PS1#定义系统提示符的变量
\d 显示日期,格式为星期 月 日
\h 显示简写主机名
\t 显示24小时制时间
\T 显示12小时时间
\A显示24小时制时间
\u显示当前用户名
\w 显示当前所在目录的完整目录
\W 显示最后目录
\#执行的第几个命令
\$提示符 如果是root显示#如果是普通用户显示$
echo $PS1
PS1=‘[\u@\t \w]\$ ’
临时生效
位置参数变量
$n n代表数字,0代表命令本身,1-9代表第一到第九个参数,10以上的参数需要大括号包含,如${10}
$* 这个变量代表命令行中所有的参数
$@ 这个变量也代表命令行中所有的参数,把每一个参数区别对待
$# 这个变量代表命令行中所有参数的个数
echo $0
echo $1
eg1
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $sum
eg2
#!/bin/bash
echo "A total of $# parameters"
#使用$#代表所有参数个数
echo "The parameters is :$*"
#代表所有参数
echo "The parameters is :$@"
#代表所有参数
$*和$@的区别
para.sh
#!/bin/bash
for i in “$*”
do
echo $i
done
for y in “$@”
do
echo $y
done
./para.sh 1234
1 2 3 4
1
2
3
4
预定义变量
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0.则证明上一个命令执行不正确
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
echo “The current process is $$”
find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
&把命令放入后台执行。
echo “The last process is $!”
接受键盘输入
read 选项 变量名
-p 提示信息 在等待read输入时,输出提示信息
-t 秒数 read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数 read命令只接受指定的字符数就会执行。
-s 隐藏输入的数据,适用于机密信息
eg:
read -t 30 -p “Please input your name:” name
echo “Name is $name”
read -s -t 30 -p “Please enter your age:” age
echo -e “\n”
echo “Age is$age”
read -n 1 -t 30 -p “Please select your gender[M/F]:” gender
echo -e “\n”
echo “Sex is $gender”
数值运算与运算符
变量测试与内容替换
数值运算与运算符
declare 声明变量的类型
declare [+/-][选项]变量名
- 给变量设定类型属性
+ 取消
-i 将变量声明为整数型(interger)
-x 将变量声明为环境变量
-p 显示指定变量的被声明的类型
有点像强制类型转换
export aa -x
数值运算——方法一
aa=11
bb=22
declare -i cc =$aa+$bb
方法二
expr或let数值运算工具
aa=11
bb=22
dd=$(expr $aa + $bb)#+左右两侧空格
方法三
aa=11
bb=22
ff=$(($aa+$bb))
gg=$[$aa+$bb]
echo $ff
运算符
+,-
!~
*/%
+,-
...
aa=$(((11+3)*6/3))
变量测试与内容替换
y没有设置 变量y为空值 变量y设置值
x=${y-新值} x=新值 x为空 x=$y
通过x判断y
unset y
x=${y-new}
new
y=""
x=${y-new}
y="123"
x=${y-new}
123
环境变量配置文件
环境变量配置文件简介
环境变量配置文件作用
其他配置文件和登录信息
简介
永久性生效
source 配置文件
.配置文件
直接生效
主要是对系统默认的环境变量,比如PATH,HISTSIZE,PSI等
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile 当前用户有效
~/.bashrc 当前用户有效
/etc/bashrc
~ 家目录
环境变量配置文件的作用
/etc/profile #所有人
/etc/profile.d/*.sh #所有人
~/.bash_profile #当前用户
~/.bashrc #当前用户
/etc/bashrc #所有人
丨 丨
丨—— /etc/profile.d/*.sh———————丨
丨
/etc/profile.d/lang.sh ——/etc/sysconfig/i18n#语言环境
1,输入密码
2,不输入用户密码
1,/etc/profile——
UUSER 变量
LOGNAME变量
MAIL变量
PATH
HOSTSIZE
HOSTNAME
umask
调用/etc/profile.d/*.sh
~/.bash_profile——
调用了~/.bashrc文件
在PATH变量后边加了“:$HOME/bin”这个目录
~/.bashrc——
别名
调用了/etc/bashrc
/etc/bashrc——
定义了登录提示符
PATH
umask
PS1
调用/etc/profile.d/*.sh 不需要登录生效
其他配置问价和登录信息
注销时生效的环境变量配置文件
~/.bash_logout
~/.bash_history
shell登录信息
/etc/issue
\d 显示当前系统日期
\s 显示操作系统名称
\l 显示登录的终端号,这个比较常用
\m 显示硬件体系结构,如i386、i686
\r 显示内核版本
\t 显示当前系统时间
Linux支持6个本地终端接入,可以使用ALT+F1-F6切换
/etc/issue.net#远程终端欢迎信息
由ssh的配置文件决定,/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(记得重启SSH服务:service sshd restart)
/etc/motd
#不关本地登录还是远程登录都生效,登陆后欢迎信息