Linux学习笔记之shell
1, shell的作用
shell为命令解释器,它介于操作系统内核和用户之间,负责解释命令。大部分Linux中默认的shell为bash shell。用户的登录shell记录在用户的密码文件中/etc/passwd中的最后一个字段。用#usermod –s shell程序路径 用户名更改用户的shell或者直接在用户密码文件中更改。注意,如果不想让某用户登录系统,可以更改该字段为nologin。
2, shell的输入与输出
shell的脚本中,可以使用标准输入,缺省为键盘,也可以指定一个文件。输出缺省为屏幕输出,也可以将结果输入到文件中。
使用命令输出#echo
echo “string” /c不换行
/f进纸
/t跳格
/n换行
echo –n 禁止输入后换行
-e 是转义符生效。
使用命令输入#read
Read variable varible2 ….
使用read命令指定变量,系统将说有的输入再赋值给改变量,直到遇到回车或者文件结束符。
例如:#read NAME 定义一个变量NAME
Hello 将字符串Hello赋值给变量NAME
#echo $NAME 用echo将变量NAME的值输出
Hello NAME的值Hello被输出
管道命令符“|”的使用
管道命令符用语吧一个命令的输出传递给另一个命令作为输入。格式为:命令|命令
例如:#ls | grep guatel.doc 在列出的文件中查找guatel.doc这个文件。
标准输入,输出和错误。
其中0代表标准输入,缺省为键盘,也可以是文件和命令
1代表标准输出,缺省为屏幕,也可以是文件
2代表标准错误。缺省时屏幕,也可以是文件
文件的重定向
在执行命令时,可以指定输入,输出和错误。要实现这一点要使用文件重定向。常用的文件重定向命令
Command > filename 把输出重定向到新文件
Command >>filename 把输出重定向到文件(追加)
Command 1>filename 把输出重定向到文件中(覆盖)
Command >filename 2>&1 把输出和错误一起定义到文件中
Command 2>filename 把错误定向到文件中
Command 2>>filename 把错误追加到文件
Command >>filename 2>&1 把输出和错误一起追加到文件中
Command <filename >filename2 把文件1作为输入,以文件2作为输出
Command <filename 把文件1作为输入
Command <delimiter 从标准输入中读入,知道遇到delimiter分解符
Command <&m 把文件描述符作为输入
Command >&m 把输出重定向到文件描述符m中
Command <&- 关闭标准输入
Shell中条件判断符的使用
&&命令,只有在左边命令返回真的时候右边的命令才能被执行。
例如:#mv /app/bin /apps/bin && rm –r /apps/bin
||命令 ,只有左边命令未执行成功,那么就执行后面的命令。
例如:#cp wp.txt cpps.txt || echo “copy failed”
环境和shell变量
变量可以定制用户本身的工作环境,也可以保存一些有用的信息,还可以保存一些临时的信息。
用户自定义变量,只在用户自己定义和修改
环境变量,系统维护,用于设置用户的工作环境
预定义变量,bash中的特殊变量,不能直接修改
位置变量,通过命令行给程序传递参数
用户自定义变量。#变量名=变量值定义 例如#A=12
环境变量,常见的有$USER(用户名),$LOGNAME(主机名)$UID(用户ID),$SHELL(当前的shell)$HOME(用户家目录)$PWD(绝对路径)$PATH(可执行命令的路径)$EDITOR(默认的编辑器)。全局环境变量的配置文件在/etc/profile中,用户自己的环境变量在~/.bash_profile中。可以用命令#set来查看系统的环境变量的设置情况
预定义的变量
$0:当前执行的进程名字
$$:当前执行的shell的PID
$?:上一条命令是否执行成功,如果为0则成功,非0则失败
位置变量
$n :n代表变量的位置
例如#./touchfile file1 file2 file3 则file1就是$1意味着它是第一个参数,其他同理依次为$2和$3。
作业,编写一个简单的shell脚本输出hello
#vim zuoye
在文件中添加代码
#!/bin/bash 表示使用bin下面的bash进行编译
#this is my zuoye
Echo “hello”
保存退出。
#chmod a+x zuoye 给文件添加执行权限
#./zuoye 执行shell文件
Shell中的控制语句
1.条件判断语句if
在进行if语句的学习之前我们得要了解一些条件判断的参数
参数 |
返回值 |
意义 |
-e filename |
True |
文件存在 |
-f filename |
True |
文件存在并且是一般文件 |
-d directoryname |
True |
文件为目录 |
-w filename |
True |
文件存在并且可写 |
-r filename |
True |
文件存在并且只读 |
-x filename |
True |
文件存在并且可执行 |
-s filename |
True |
文件不为空 |
-b filename |
True |
文件未特殊块 |
-L filename |
True |
文件为连接 |
-O filename |
True |
文件属于当前用户 |
-G filename |
True |
文件输入当前组 |
File1 –ot file2 |
True |
文件1比文件2旧 |
File –nt file2 |
True |
文件1比文件2新 |
Int1 –eq int 2 |
True |
Int1 大于int2 |
Int1 –ge int2 |
True |
Int1大于或等于int2 |
Int1 –gt int2 |
True |
Int1大于int2 |
Int1 –le int2 |
True |
Int1小于等于int2 |
Int1 –lt int2 |
True |
Int1 小于int2 |
Int –ne int2 |
True |
Int1不等于int2 |
If条件语句的格式
if 条件判断 例如:if [ $int –eq 90 ]
then then
结果 echo “yes,$int = 90”
else else
结果 echo “no,$int != 90”
fi fi
2,循环语句for
For的格式:
for loop in 取值范围 例如:for loop in {1,2,3,5,6}
do do
命令 $loop=`expr $loop + 1`
Done done
While语句的格式:
While 条件
Do
结果
Done
3, 分支语句case
Case 变量值 in
模式1) 命令;;
模式2) 命令;;
*) 命令;;
Esac
4, until循环
until 条件 直到满足条件才执行
do
命令
Done
5, break和continue语句的区别
两者都用于控制循环的,break直接跳出了整个循环,而continue跳出当前的循环重新判断执行下一次循环。
本文出自 “一直奔跑在路上” 博客,转载请与作者联系!