shell 学习总结

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

1、基本格式

#!/bin/bash

这里写你的代码

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

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中
| 表示 或  匹配一组可选的字符
^$ 匹配空行






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值