Linux学习笔记(七)
来源:互联网 发布:lis索引超出了数组界限 编辑:程序博客网 时间:2024/05/03 03:16
初识Shell——bash
Linux中的shell有点类似Windows下的cmd.exe或者.bat。管理整个计算机硬件的其实是操作系统的内核(Kernel),用户无法与内核直接交互,所以通过shell来跟内核通信。即shell介于操作系统(Kernel)和用户之间,它是用户与内核的翻译官,是一个命令解释器。
常见的shell种类有:Bsh、Csh、Ksh、Bash、Zsh
Bsh和Csh出现的较早,Ksh继承了它两的功能,Bash继承了Bsh和Ksh的升级版,而且是Linux系统中默认的shell,Zsh则兼具了各种shell的程序有点,交互式操作效率更高,但仍不及bash应用广泛。
Shell环境的切换:
登录Shell:指用户每次登录系统后自动加载的Shell程序,大多数Linux系统采用 /bin/bash 作为默认登录Shell;/etc/shells 文件记录了系统支持的有效登录Shell
[root@localhost ~]# cat /etc/shells ==>使用chsh -l命令也可查看/bin/sh/bin/bash/sbin/nologin/bin/tcsh/bin/csh/bin/ksh [root@localhost ~]#
默认的shell是bash,那么如何切换shell环境呢?分为两种,一种是临时切换,即当此终端关闭时,下次启动仍然是bash,方法很简单,直接在终端输入shell名称;第二种则是更改用户登录Shell,需要修改/etc/passwd文件中用户记录的最后一个字段,或者像前面讲到的使用修改用户的命令:usermod -s shell程序路径 用户名,也可以使用chsh命令,下次登录有效。
查看当前shell可以通过/etc/passwd来查看,要查看系统默认使用的shell,可以使用echo $SHELL。
bash的常用功能:
类型
设备文件
文件描述编号
默认设备
标准输入
/dev/stdin
0
键盘
标准输出
/dev/stdout
1
显示器
标准错误输出
/dev/stderr
2
显示器
(备注:/dev/stdin、/dev/stdout、/dev/stderr这三个文件是一个符号链接,输入输出与重定向关系紧密)
类型
操作符
用途
重定向标准输入
<
将命令中接收输入的途径由默认的键盘更改为指定的文件
重定向标准输出
>
将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上
>>
将命令执行的结果追加输出到指定文件
重定向标准错误
2>
清空指定文件的内容,并将标准错误信息保存到该文件中
2>>
将标准错误信息追加输出到指定的文件中
重定向标准输出和
标准错误
&>
将标准输出、标准错误的内容全部保存到指定的文件中,而不是直接显示在屏幕上
管道操作符号是“|”,连接左右两个命令,将左侧的命令输出的结果,作为右侧命令的输入(处理对象)。管道是脚本语言的特色,它可以讲多个功能连接起来形成一个大的功能,这点与面向对象有很大的不同。
例如我现在要查看历史记录命令的第4行:则可先将前4条命令显示出来,在显示前4条命令的最后一条:history | head -4 | tail -1 这样即取出了第四条命令。
Shell变量
Shell变量和其他语言的变量含义大同小异,就是可以存放不同的内容,它也为灵活管理Linux系统提供特定参数。一般有两层意思:变量名:使用固定的名称,由系统预设或用户定义;变量值:能够根据用户设置、系统环境变化而变化。
Shell变量的种类:
变量的赋值与引用:
定义新的变量名要以英文字母或下划线开头,区分大小写,格式为:变量名=变量值
查看变量的值:echo $变量名
[root@localhost ~]# DAY=Sunday [root@localhost ~]# echo $DAY ==>通过$符号引用指定名称的变量值Sunday [root@localhost ~]#
(注意:在查看变量时,如果变量名容易和后边的字符串连在一起导致混淆,则应该使用大括号将变量名括起来,使用形式为:${变量名} ,例如: 若已知变量Var的值为Benet,则执行“echo $Var3.0”命令后将显示结果“.0”而不是“Benet3.0”,因为在该命令中,会将“Var3”当成变量名(默认未定义此变量)。若希望正确显示“Benet3.0”的输出结果,则需要执行“echo ${Var}3.0”)
[root@localhost ~]# Var =Benet[root@localhost ~]# echo $VarBenet[root@localhost ~]# echo $Var3.0.0[root@localhost ~]# echo ${Var}3.0Benet3.0[root@localhost ~]#
从键盘输入内容为变量赋值,格式为:read [-p "输入信息"] 变量名
[root@localhost ~]#read varhaha ==>这里等待输入[root@localhost ~]#echo $varhaha[root@localhost ~]#
在给变量赋值时,使用不同的引号操作的区别:
[root@localhost ~]#name=jzhou[root@localhost ~]#echo $namejzhou[root@localhost ~]#myname="$name is me" ==>这里使用的是双引号[root@localhost ~]#echo $mynamejzhou is me ==>将$name这个变量执行出来了[root@localhost ~]#myname='$name is me' ==>这里使用的是单引号[root@localhost ~]#echo $myname$name is me ==>原样显示出来了,$name没有执行[root@localhost ~]#
[jzhou@localhost ~]$ locate crontab/etc/anacrontab/etc/crontab/usr/bin/crontab/usr/share/man/man1/crontab.1.gz.....[jzhou@localhost ~]$ ls -l `locate crontab` ==>先执行locate crontab,再执行ls -l-rw-r--r-- 1 root root 298 2006-12-18 /etc/anacrontab-rw-r--r-- 1 root root 255 2006-07-15 /etc/crontab-rwsr-sr-x 1 root root 315416 2008-07-15 /usr/bin/crontab-rw-r--r-- 1 root root 1846 2008-07-15 /usr/share/man/man1/crontab.1.gz.....[jzhou@localhost ~]$
设置变量的作用范围,格式:export 变量名
一般情况下,父进程的自定义变量是无法在子进程中使用的,但是通过export将变量变成环境变量后,就能够在子进程下使用了。
[root@localhost ~]#name=jzhou[root@localhost ~]#echo $namejzhou[root@localhost ~]# export name ==>输出为全局变量[root@localhost ~]# zsh[root@localhost]~# echo $namejzhou[root@localhost]~# exit[root@localhost root]# unset name==>消除变量内容[root@localhost root]# echo $name[root@localhost ~]#
变量还有一个好处,当您经常访问一个目录时,而且这个目录比较长,可以将它付给一个简单的变量,这样进入这个目录时候只需cd 变量就行了。如work="~/temp/2013/test/",则进入这个目录只需cd work。
数值变量的运算:
之前讲到过可以使用命令bc来打开一个计算器,其实Bash程序并不适合进行强大的数学运算,例如小数或指数运算的,一般只能进行简单的整数运算,若不使用bc,则也可以使用下列格式来进行简单数值计算:
格式:expr 变量1 运算符 变量2 [..运算符 变量n...]
expr命令常用的运算符有:+、-、\*(注意要有\)、/、%
[jzhou@localhost ~]$ expr 10 * 2expr :语法错误[jzhou@localhost ~]$ expr 10 \* 220[jzhou@localhost ~]$expr 10 + 212[jzhou@localhost ~]$
环境变量
环境变量配置文件:全局配置文件:/etec/profile
用户配置文件:~/.bash_profile
查看环境变量:env
set (set命令可以查看所有的Shell变量,其中包括环境变量)
常见的环境变量:
位置变量:
表示为$n,n为1~9之间的数字,$n的作用就是为脚本文件传递执行参数。
[jzhou@localhost ~]ls -a -l -l ==>a就是第1个位置变量,依次类推,其实这个命令就是ls -al
预定义变量:
[root@localhost ~]# bash [root@localhost ~]# echo $0 $$ ==>查看当前所执行进程的名称、PID号-bash 32484[root@localhost ~]# exxit ==>执行一条错误的命令bash: exxit: command not found[root@localhost ~]# echo $? 127 ==>返回非0值,表示上一条命令异常[root@localhost ~]# exitexit[root@localhost ~]# echo $? 0 ==>返回0,说明上一条命令正常
灵活使用这些变量,将大大增强Shell脚本程序的功能,$0作为预定义变量,表示当前执行的程序名,需要与$1~$9的位置变量区分开。
引入shell脚本
shell脚本:
[root@localhost ~]# vi repboot.sh#!/bin/bash ==>声明使用的shell环境,根据执行的方式不同可加可不加# To show usage of /boot directory and mode of kernel file.echo "Useage of /boot: "du -sh /bootecho "The mode of kernel file:"ls -lh /boot/vmlinuz-*[root@localhost ~]# chmod a+x repboot.sh
如有错误,欢迎指正。
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- Linux学习笔记(七)
- Linux学习笔记(七)
- Linux学习笔记(七)
- Linux学习笔记(七)
- Linux学习笔记(七)
- linux学习笔记(七)
- LINUX学习笔记(七)
- Linux学习笔记七
- Linux学习笔记七
- Linux 学习笔记(七)增加硬盘
- Linux学习笔记(七)--文件系统管理
- Linux Shell学习笔记七
- [Linux]C++学习笔记(七)
- Linux学习笔记之七
- 学习笔记(七)
- Linux学习笔记(七)-Linux内核分析
- Linux学习(七)
- Linux系统编程学习笔记(七)内存管理
- MySQL的一些简单语法(5)-视图
- 使用COMPC创建库
- 人机交互复习
- 堆栈的不同
- 孙叔敖之为官三怨
- Linux学习笔记(七)
- (线性表)单链表
- 中华美德之宋就偷浇楚瓜,以德报怨
- 让ie支持css3部分功能
- 求助:现在遇到下面汉字编码问题,请知道的朋友帮帮忙哈~~~
- Java 面试题问与答:编译时与运行时
- 【Ubuntu日常技巧】Ubuntu开机自动设置笔记本屏幕亮度
- org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested
- 修改VS2010安装时的注册信息