您的位置:首页 > 运维架构 > Shell

shell 学习总结

2017-01-21 21:14 260 查看

近段时间在学linux 下shell编程总结一下

1、基本格式

#!/bin/bash

这里写你的代码

[align=left]解释:因为shell有很多的类行,比如 sh bash dash等等
我们写一个shell脚本不可能只在一台机器上面运行,为了方便
我们就加了 #!/bin/bash 这一句话。其中 #! 符号成为“Sha-bang”
符号是shell脚本的起始符号,它指定一个文件类型的特殊标记。它告诉操作系统这个文件执行需要一个解释器 后面的路径就是指定了解释器为bash 当然也可以是sh
#!/bin/bash
#!/bin/sh 都是对的[/align]

2、简单的执行
在linux 中一个文件想要被执行首先需要有执行权限

可以用 chmod 777 文件名 来改

这里说一下文件的权限

我们执行 ls -l 如图



第一个字符 表明了文件的类型 -表示文件 d表示目录 l表示链接

r读4

w写2

x可执行1

所有者

所在组

其他组

表示用户

表示用户所在组

文件大小

最后修改日期

文件名

我们改为777表示任用户都可以去执行他

或者

bash ./文件  也可以直接去执行

3、变量以及引用
众所周知变量就是用来保存有用的信息的

Shell是一种弱类型语言,使用变量的时候无需首先声明其类型。

var = "world"

echo "hello $var"

会输出hello world

$表明一个变量 也可以用一个大括号来表示 ${}

var = "world"

echo "hello $vars"

输出 hello 而不是 hello worlds (注意后面有个s) 因为系统将 $vars 当作一个变量了

而$vars并未赋值为空

所以出现了混淆的情况 可以用 ${}代替

var = "world"

echo "hello ${var}s"

就会输出 hello worlds

------------------------------------------
环境变量

ENVIRON-VARIABLE=value #环境变量赋值

export ENVIRON-VARIABLE #声明环境变量

unset ENVIRON-VARIABLE 清除环境变量

env 命令列出系统所有环境变量

列举一些比较重要的环境变量

PWD            记录当前的目录路径

OLDPWD        记录旧的目录路经

HOME        记录当前以后家目录

SHELL        保存默认的shell

PPID        当前进程的父进程号

位置参数

是一种特殊的Shell变量,用于想shell脚本传递参数

$0        表示脚本的名字

$1        表示第一个参数

$2        表示第二个参数。。。

从${10}开始都用打括号表示

....

$#        表示传递的参数个数

$$        脚本运行进程号

$@/$*    表示所有参数

$?        表示命令推出的状态 ()
引用



我们通常将单引号的引用方式称为全引用,双引号为部分引用
命令替换
`linux 命令`
$(linux命令)
位运算

    是在二进制基础上进行的运算

    << 想左位移 相当与乘于2

    4<<2 =16

    >> 向右移 相当与除以2

    8 >> 2 =4

    3&1 按位与

    3 0000 0011

    1 0000 0001

      与后 0000 0001

    3&1 = 1

    按位或、按位非、按位异或同理

4、退出、测试、判断
退出
当命令执行完后系统会返回一个退出状态



存储在$?中
测试
可用来用于测试表达式的条件的真假
真则返回一个0,假时返回一个非0整数







test  或 [    ]

注意空格 [空格 内容
空格]
简单if语句
if 条件

then
       命令..
fi

if 条件
then
           命令..
elfi 条件
then
       命令
else
       命令
fi
case结构

case 变量 in
值1)
      命令;;
值2)
      命令;;
*)
     命令;;
esac

for循环

#!/bin/bash
for i in 1 2 3 4 5
do
echo "hello $i"
done
#还可以
for i in {1..5}
do
echo "haha $i"
done
echo "计算奇数之和先输入一位数"
read val
sum=0
for i in {1..100..2}
do
let "sum+=i"
done
echo "结果为 $sum"

for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday
do
echo "$day"
done

echo "还可以列出所有文件"
for f in $(ls)
do
echo "$f"
done

while循环

#!/bin/bash
echo "标志控制的while循环猜字游戏"
echo "输入一个数字(1-10)"
read val
single=1
while test $single -ne 0
do
if test $val -gt 5
then
single=1
echo "Too Big"
read val
elif test $val -lt 5
then
single=1
echo "Too Smali"
read val
else
echo "You are right"
single=0
fi
done


正则

* 0个或多个在×字符之前的那个普通字符

. 匹配任意字符

^ 以后面的字符开头或屏蔽后面的字符

$ 匹配行尾

[] 匹配字符集合

\ 转义字符屏蔽一个元字符的特殊意义

\<\> 精确匹配符号

\{n\} 前面的字符出现n次

\{n.\}前面的字符至少出现n次

\{n,m\}前面的字符至少出现n次至多出现m次

? 匹配0个体或1个在其之前的那个字符

+ 匹配1个或多个

() 表示一个字符集合或用在expr中

| 表示 或  匹配一组可选的字符

^$ 匹配空行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: