Linux学习——Shell

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  ——~/.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

#不关本地登录还是远程登录都生效,登陆后欢迎信息



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值