linux - shell

shell

用户登录linux后,就会出现一个系统提示符号,这个就是shell,当用户登录后,实际上是进入到一个叫shell的程序中,shell的角色就是将用户输入的每个命令都翻译成linux系统能识别的指令;

当shell接收到用户输入的命令后,就会开始执行,并把结果显示到屏幕上,结束后shell又会显示系统提示符,等待用户输入下一条指令;

shell基础

shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。

echo $SHELL		;查看当前使用的shell
cd /etc/shells	;查看操作系统所有的shell
chmod 777 text.txt	;修改文件权限
chown systemk1t.systemk1t test.txt	;修改文件所属组
chgrp root test.txt	;修改用户组
umask 0000			;修改掩码

shell脚本

shell文件以.sh结尾,并且写完的shell要给执行权限

#!/bin/bash
mytext="sYstemk1t"
echo $mytext

定义变量前后不可存在空格,加空格shell解析不了

shell特性

  • 双引号(“”):用来使shell无法认出空格、制表符和其他大多数特殊字符,比如:建立一个带空格的文件touch “wang bao ming”。
  • 单引号(‘):用来使shell无法认出所有特殊字符。
  • 反引号(`):用来替换命令
  • 反斜杠():用来使shell无法认出的特殊字符,使其后的字符失去了特殊的含义,转义字符。eg:创建带空格文件名 touch my\ file
  • 分号(😉:允许在一行上放多个命令。mv 1.txt 2.txt; mv 2.txt 3.txt;
  • &:命令后台执行
  • 括号():创建成组的命令
  • 大括号{}:创建命令块。
  • 竖杠(|):管道标示符
  • < > &:重定向表示符
    • ? [ ] !:表示模式匹配
  • $:变量名的开头
  • #:表示注释(第一行除外)
  • 空格、制表符、换行符:当做空白

变量与运算符

变量

变量包括本地变量、影响变量的命令、环境变量、引号、变量替换、运算符、位置变量、表达式变量、标准shell变量、运算符的优先级、特殊变量

引号

引号的必要性、双引号、单引号、反引号、反斜杠

  • 引号的必要性

  • 变量和替换操作,在脚本中执行变量替换时,最容易犯的一个错误就是引号的错误。

  • 例如:echo aa.tar.gz * ; echo “aa.tar.gz *” 效果大不一样

  • 双引号 使用双引号可以引用除字符$,`反引号,\反斜杠外的任意字符或者字符串。
    shell echo -e " hello world, $SHELL '\n* sYstemk1t 'echo $myvar' "

  • 单引号 单引号与双引号类似,不同的是shell会忽略任何引用值。换句话说,如果屏蔽了其特殊含义,会将引号里的所有字符,包括引号都作为一个字符。
    shell echo -e ' hello world, $SHELL '\n* sYstemk1t '

  • 结论:单引号让特殊字符失去意义。

  • 反引号 反引号用于设置系统命令的输出到变量。shell将反引号中的内容作为一个系统命令,并执行其内容。

  • eg:echo “* wangbaoming echo $PATH

  • 反斜杠

  • 如果一个字符有特殊含义,反斜杠防止shell误解其含义,即:屏蔽其特殊含义。

  • 下属字符含有特殊含义:$ * + ^ ` ‘’ | ?

  • eg:echo * echo *

表达式类型

  • 按位运算符
    • ~op1 反运算符
    • op1<<op2 左移运算符
    • op1>>op2 右移运算符
    • op1 & op2 与比较运算符
    • op1 ^ op2 异或运算符
    • op1 | op2 或运算符
    • eg: echo $[2<<4] echo $[2^4]
  • $[ ] 表示形式告诉shell对方括号中的表达式求值
    • eg: echo $[3+9]
  • 逻辑运算符
    • && 逻辑与运算
    • || 逻辑或运算符 echo $[1||1]
  • 赋值运算符
    • =,+=,-=,*=,/=,%=,&=,^=、|=,<<=,>>=
    • let count = $count + $change
    • let count += $change

控制流

if-else

#!/bin/sh

echo -n "Enter input you filename:"
read myfile
if [ -e $myfile ]
then
    if [ -s $myfile]
    then
        echo "$myfile exist and size greater than zero"
    else
        echo "$myfile ecist buf size is zero"
    fi
else
    echo "file no exist"
fi

case

#!/bin/sh
echo -n "Enter input you number from 1 to 3:"
read num
case $num in
1)
    echo "you select 1"
    ;;
2)
    echo "you select 2"
    ;;
3)
    echo "you select 3"
    ;;
y|Y)
    echo "you select y"
    ;;
*)
    echo "`basename $0`:this is between 1 and 3">$2
    exit;
    ;;

esac

for

#!/bin/sh
for i in 1,2,3,4,5
do
    echo $i
done

until

#!/bin/sh
PART="/backup"
LOOK_OUT=`df | grep "$PART" | awk`{printf $5}`| sed 's/%//g'`
echo $LOOK_OUT
until [ "$Look_Out" -gt "90" ]
do
    echo -e "Filesystem $PART is near full" | mail root
    LOOK_OUT=`df | grep "$Part" | awk '{printf $5}' | sed 's/%//g' `
    sleep 3600
done

while

#!/bin/sh
echo "ctrl+d quit"
while echo -n "Enter you name:"
read Name
do
    echo "Yeah,you name is : $Name"
done

条件测试

文件

test -d 文件名
echo $?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值