学习笔记_linux shell_1_20160315(待续)

Linux shell 是作为用户与Linux系统间接口的程序,也就是linux命令解释器。

shell有三类:

/bin/sh
/bin/csh
/bin/ksh

重定向:将标准输入(0)、标准输出(1)、标准错误输出(2)绑定到键盘、屏幕、文件等位置

输出重定向:>或>>

输入重定向:<或<<

错误重定向:2>或2>>

错误和正确重定向:2>&1

例如:

ls>ls.txt
:将ls重定向到ls.txt
cat <1.sh
:将1.sh文件的内容输入重定向到cat命令
ls>error.txt 2>&1> ok.txt
:将ls的错误输出重定向到error.txt,正确输出重定向到ok.txt
ls >kk.txt 2>&1
:表示重定向文件为重定向的错误和正确输出文件

管道:将一个命令的输出作为后一个命令的输入

例如:

ls -l | grep '^d'
:将ls -l 的输出结果作为 grep '^d'命令的输入
等同于下面的代码:
ls -l ls.txt
grep '^d' ls.txt

系统环境变量:

HOME=/root :表示当前用户的家目录

HOSTNAME=server1:主机名

LOGNAME=liu:登录名

USER=root:当前用户名

SHELL=/bin/bash:当前shell的类型

$0 :shell脚本的名字

$# :传递给脚本的参数个数

$$:shell脚本的进程号

$*/$@:都表示列出所有参数,唯一差别是$*列出参数间以环境变量IFS的第一个字符为字符间隔,而$@始终以空格为间隔

$1,$2,....:分别表示第一个参数,第二个参数,....


引号问题:

单引号下变量不会执行,双引号下会执行。

例如:

var = hello
echo "var is $var"
echo ' var is $var '
执行结果:
var is hello
var is $var

在shell中通过在变量名前加上一个$符号来访问它的内容。

如果字符串中包含空格,必须要用引号括起来,因为所有变量都被看做字符串并以字符串来存储。

使用read命令将用户的输入赋值给一个变量。


条件:

test或[]命令:检查一个文件是否存在

语法:

test -f <filename>或

[ -f filename ]

比如:

if test -f fred.c
then
...
fi
就是说当fred.c存在执行then后面的语句
同理:
if [ -f fred.c ]
then
...
fi
必须在[符号与被检查的条件之间留一个空格,因为[]等同与test,命令要与条件参数或者选项之间留一个空间


test 命令的条件类型:

1.字符串比较

string1 = string2

string1 !=string2

-n string :字符串string不为空时结果为真

-z string :字符串string为null则结果为真

2.算术比较

expr1 -eq expr2  :两表达式相等为真

expr1 -ne expr2  :两表达式不等为真

expr1 -gt  expr2  :expr1>expr2则为真

expr1 -ge expr2 : expr1>=expr2则为真

expr1 -lt   expr2  : expr1<expr2 则为真

expr1 -le  expr2 : expr1<=expr2则为真


3.文件条件测试

-d file :文件为一目录则为真

-e file :文件存在则为真

-f file  :文件为普通文件则为真

-g file :文件的set_group_id位被设置则为真

-u file :文件的set_user_id位被设置则为真

-s file :文件大小不为0则为真

-r file :文件可读则为真

-w file :文件可写则为真

-x file  :文件可执行则为真


控制语句:

1.if语句:

if condition
then
  statements
else
  statements
fi

2.elif语句:

if condition
then
  statements
elif condition1 ;then
  statements
else
  statements
fi
在if或者elif条件比较的时候最好把变量使用双引号包含在内,因为:

#!/bin/bash

echo "Is it morning ?Please answer yes or no"
read timeofday
if [ $timeofday = "yes" ]
then
  echo "Good morning"
elif [ $timeofday = "no" ];then
  echo "Good afternoon"
else
  echo "Sorry,Enter yes or no"
  exit 1
fi
exit 0
上面代码如果在运行到read时直接enter一下,那么就会将一个空字符串赋值给timeofday变量,就会出现错误,if语句会变成酱紫:

if [ = "yes" ]这样并不合法

为了避免这种情况我们在加上双引号,if语句就会是酱紫:

if [ ""="yes" ]这样是合法的


还有就是shell脚本的第一行总是有#!/bin/bash这样的代码,此代码表示使用指定的shell来解释此脚本


3.for语句:

for variable in values
do
  statements
done

4.while语句:

while condition 
do
  statements
done

5.until语句:

until condition
do
  statements
done

for、while、until:

#!/bin/bash

for foo in foo var 43
do
echo $foo
done
exit
输出结果为:
foo
var
43
#!/bin/bash

echo -n "Enter password: "
read password
while "$password"!="liuzigang"
do
  echo -n "Error,once again:"
done
exit 0
当我们不知道循环次数的时候使用for就没有使用while方便

#!/bin/bash

echo -n "Enter password: "
read password
until "$password"="liuzigang"
do
  echo -n "Error ,once again: "
done
exit 0
until语句和while语句的条件刚好反过来


6.case语句:case语句避免了多条件时比较撩眼的if嵌套

语法:

case variable in
  pattern [ |pattren ...] statements;;
  pattern [ |pattren ...] statements;;
  ...
esac
例如:

#!/bin/bash

echo "Is it moring,enter yes or no: "
read timeofday
case "$timeofday" in
  [Yy]|[Yy][Ee][Ss]) echo "Good morning" ;;
  [Nn]*  ) echo "Good afternoon" ;;
  * ) echo "Sorry";;
exit 0



后续....

小结:shell脚本,乍一看摸不到头脑,去图书馆借的书大多不适合入门,推荐linux程序设计第四版的第二章作为shell入门,通俗易懂。



不枉青春不虚此行——谢谢阅读,晚安



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值