shell的基本知识
shell 是一个命令解析器,侦听用户指令,启动 执行并将结果返回给用户,属于交互式的是Linux下一种程序设计语言,它有变量 关键字 流程控制 等结构化语句,用它可以编写功能强大的程序脚本
shell信息查看
查看支持的SHELL cat /etc/shells
# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
查看当前使用的SHELL echo $SHELL
# echo $SHELL
/bin/bash
查看shell版本
# bash -version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
# bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
修改用户的shell
1) vim /etc/passwd更改最后一项
2)usermod -s ...
shell的初始化
一个用户登录,需要执行一下几个文件
/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc
~/.bash_logout 退出时执行的动作
历史命令
历史命令保存: vim ~/.bash_history
# vim ~/.bash_history
...
cd LibO_3.3.2rc2_Linux_x86_install-rpm_en-US/
ls
...
查看历史
# history
1008bash -version
1009bash --version
1010qq
1011vim ~/.bash_history
1012history
执行历史命令
!!! 上一次命令
!1012 执行相关编号号指令
!-5 执行倒数第5个
!h !p !c执行最后能匹配到该字符的命令
与命令相关的变量
echo $HISTFILE 历史记录文件(可以在/etc/profile中设置)
# echo $HISTFILE
/root/.bash_history
echo $HISTFILESIZE 历史记录文件保存的记录大小
# echo $HISTFILESIZE
1000
echo $HISTSIZE 内存中保存的文件大小
# echo $HISTSIZE
1000
注意:后两者有所不同,一个是写入文件中,一个是活动在内存中
如何禁止历史记录的方法
# cat ~/.bash_logout
# ~/.bash_logout
clear
# echo "history -c" >> ~/.bash_logout
# cat ~/.bash_logout
# ~/.bash_logout
clear
history -c
在每次退出的时候,通过执行history -c 来把命令清空即可
执行多条命令的方法
1 无条件执行 命令行之间用分号隔开
egmkdir a;pwd;useradd a
()子shell执行
# cd /etc/X11/;ls
applnkprefdm sysconfigxinit xorg.conf
fs serverconfigtwm XmodmapXresources
# (cd /etc/gdm;ls)
custom.conflocale.aliasPostLogin PreSession XKeepsCrashing
Init modules PostSessionsecuritytokens.confXsession
#
可以看到,你如果()这样执行指令,所开启的是一个新的shell来进行,而不是进入当前的环境
2 有条件的执行
&&逻辑与 前一个执行成功时,再执行第二个,如果前者不成功,后者不执行
||逻辑或 前一个执行不成功时,在执行后者,若前者执行成功,后者不执行
shell命令执行的返回值 $?
0: 表示成功,无错误
非0:不同程度的问题
命令行的替换
! 历史记录
{} 字符展开,如mkdir {a,b,c,d}dump
# ls
# mkdir {a,b,c,d}dump
# ls
adumpbdumpcdumpddump
${} 变量替代 取变量值,有时单独一个$不安全
# a=1
# echo $a
1
# echo $a1
本意最后面一句,是要输出11的,结果没有任何显示
# echo ${a}1
11
算术运算
$(())
eg $((3+5))
`` 或$() 命令替换 如果和其他命令连用是,先执行` `中的命令
$$显示进程号
创建shell程序的步骤
1)创建脚本文件
2)设置其执行权限
3)运行
一个简单脚本的例子
# vim t1.sh
#!/bin/bash
strl="how ,are you"
echo ${strl}
# chmod u+x t1.sh
# ./t1.sh
how ,are you
read 读数据
格式
read [选项] [变量名]
-p 提示(数据输入时的提示)
-s 输入不显示
-n 接收多少个字符
# vi t2.sh
#!/bin/bash
echo -n "输入你的数据:"
read var1
echo "你输入的数据为${var1}"
# chmod u+x t2.sh
# ./t2.sh
输入你的数据:1
你输入的数据为1
流程控制三大流程控制结构顺序选择循环
选择
if [ 条件 ]
then
...
fi
比较运算符数值比较
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
字符比较
= 等于
!= 不等于
\> 大于
\< 小于
-z 是否为空(长度是否为0,为0则为真)
-n 是否不为空(长度是否不为0,不为0则为真)
条件测试
test 或者[ ]
-b file文件存在,而且是块设备文件
-c file文件存在,而且是字符设备文件
-f file文件存在,而且是普通文件
-e file文件是否存在
-h file文件存在,而且是符号链接文件
-g file文件是否设置了GID(特权位上G+S)
-p file文件存在,而且是管道文件
-r file文件是否可读
-w file文件是否可写
-x file文件是否可执行
-u file文件是否设置了UID(特权位上加U+S)
-K file文件是否设置了粘贴位(特权位上加o+T)
-O file当前用户是否为属主
-G file当前用户是否为属祖
file1 -nt file2 file1是否比file2新
if格式2
if [ 条件 ]
then
command1
else
command2
fi
if格式3
if嵌套
if [ ... ]
then
if [ ... ]
then
...
else
...
fi
else
...
fi
页:
[1]