linux学习day04(shell学习)

Posted 风中凌乱的猪头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习day04(shell学习)相关的知识,希望对你有一定的参考价值。

  1. shell是一个命令执行器,作用是遵循一定的语法将输入的命令加以解释并传给系统,用户可以用shell来启动、挂起、停止甚至是编写一些程序。shell是用户和linux的桥梁,定义了各种变量和参数,并提供了很多在高阶语言中才具有的控制结构,包括循环和分支,虽然他不是内核的一部分,但是她调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行
  2. 本质上,shell就是命令行命令简单的组合到一个文件里面。
  3. 程序基础
    1. 必须在文件的第一行加   !#/bin/sh 告诉系统他后面的参数用来该文件的执行
    2. chmod +x filename,因为vim编辑过的文件并没有可执行的功能
  4. 变量
    1. 变量名=值 取变量值($)注意变量赋值时,=两边不能有空格,且所有结束语句都不用加分号
    2. 当num=2 $numnd 打印不了时,可以$numnd来打印
    3. 默认变量
      1. $#:传入脚本的命令行参数个数(和c的区别,c的个数包括命令本身)
      2. $*:所有命令行参数值,在各个参数值间留有空格
      3. $0;命令本身
      4. $1:第一个命令行参数
      5. $2:第二个命令行参数
    4. 局部变量  在变量前加local(和C差不多)
  5. if 格式,
    1. -eq:相同
    2. -ne:不同
    3. -gt:大于
    4. -lt:小于
    5. -ge:大于或等于
    6. -le:小于或小于
    7. -z:为空
    8. -n:不为空
    9. #!/bin/bash
      a=$1
      b=$2
      if [ -z $a ] || [ -z $b ]
      then
          echo "please enter 2 no"
          exit 1
      fi
      if [ $a -eq $b ] ; then
          echo "number a = number b"
      else if [ $a -gt $b ]
          then
              echo "number a>number b"
          elif [ $a -lt $b ]
              then
                  echo "number a<number b"
          fi
      fi
  6. -e 文件已存在 ;-f文件是普通文件 ;-s文件大小不为0 ;-d文件是一个目录 ;-r文件对当前用户可以读取;-w文件对当前用户可以写入 ;-x文件对当前用户可以执行
    1.   
      #!/bin/sh 
      folder=/home 
      [ -r "$folder" ] && echo "Can read $folder" 
      [ -f "$folder" ] || echo "this is not file" 
  7. for 
    1.   
      #!/bin/bash 
      for day in Sun Mon Tue Wed Thu Fri Sat
      do
          echo $day
      done 

      统计当前目录下的文件数

    2. #!/bin/bash
      
      counter=0
      for files in *
      do
          counter=`expr $counter + 1`
      done
      echo "There are $counter files in `pwd` we need to process"
  8. while
    1. 将用户输入的数字按倒叙方式输出  
      #!/bin/bash
      echo -n "Pleasw enter number : "
      read n
      sd=0
      rev=""
      on=$n
      echo "$n"
      while [ $n -gt 0 ]
      do
          sd=$(( $n % 10 )) # get Remainder
          n=$(( $n / 10 ))  # get next digit
          rev=$( echo $rev$sd)
      done
      echo  "$on in a reverse order $rev"
  9. until
    1. 移动一个文件,如果目标位置存在文件,则监视该文件,直到文件被删除后才移动该文件  
      #!/bin/bash
      if [ "$1" = "" ] || [ "$2" = "" ]
      then
          echo "Please enter file name"
          exit 1
      fi
      if [ -e $2 ]
      then
          echo "The file already exists"
          until [ ! -f $2 ]
          do
              sleep 1
          done
      fi
      if [ ! `mv $1 $2` ]
      then
          echo "mv sucessful"
      else
          echo "mv error"
      fi
  10. case
    1.   
      #!/bin/bash 
      echo "Hit a key, then hit return."
      read Keypress 
      case "$Keypress" in
          [A-Z] ) echo "Uppercase letter";;
          [a-z] ) echo "Lowercase letter";;
          [0-9] ) echo "Digit";;
          * ) echo "Punctuation, whitespace, or other";;
      esac 

linux 学习随笔-shell基础知识

1:用户的shell历史命令保存在home/username/.bash_history中

#!! 
执行用户的上一条命令
#!pw 
执行命令历史中最近一次以pw开头的命令
2:‘*‘来匹配零或多个字符
‘?’匹配一个字符
#ls -d Day* 列出Day开头,后面匹配所有字符的目录
#ls -d Day? 列出Day开头,后面匹配一个字符的目录
3:>> 在文件中追加重定向
> 在文件中重定向
4:| 管道符
#cat /etc/passwd|wc -l
cat /etc/passwd指令的输出作为wc命令的输入。即统计passwd的行数
5 ctrl+z 命令可以暂停一个任务
#jobs 可以查看暂停的任务 如下所示:
(my-env) [[email protected] linux_learn]$ jobs
[1]+  Stopped                 vim test1.txt
#fg +id 号可以恢复运行
#bg +id 号可以将此任务放在后台运行
#ps aux |grep test1 可以查看在后台运行进程的pid
#kill -9 pid  可以结束此进程
6 $PATH
PATH当输入命令的时候LINUX会去查找PATH里面记录的路径。
比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下。
事实上当你输入命令的时候LINUX会去/bin,/usr/bin,/sbin等目录下面去找你此时输入的命令,
而PATH的值恰恰就是/bin:/sbin:/usr/bin:
其中的冒号使目录与目录之间隔开。
7 set命令可以显示系统预设的变量 比如PATH HOME等,也就可以显示用户自己定义的变量
#myname=Aming 设置自定义变量
#set |grep myname
myname=Aming
可以查看到自己定义的变量
#bash 进入另一个shell中
#set |grep myname 查看不到我们定义的变量,定义的变量只在定义的那个shell中存在
7.1 让定义的变量在所有用户中都能使用
#sudo vim /etc/profile
添加export myname=Aming
#source /etc/profile 生效
7.2 让定义的变量在所有子shell中生效
#abc=123
#export abc
7.3 取消变量 unset
#unset abc
#unset myname
8 wc 命令
# wc /etc/passwd -l 统计行数
# wc /etc/passwd -m 统计字符数
# wc /etc/passwd -w 统计词数
9 ~表示用户的home目录
root在/root下
普通用户在 /home/username下
10 2> 表示将错误重定向
2>> 表示错误追加重定向
#ls aaaa 2> /tmp/error
#ls aaaa 2>> /tmp/error
可以在error中查看错误
 
 
 
 
 
 
 

以上是关于linux学习day04(shell学习)的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈100天学习笔记Day35 Linux系统软件安装Shell编程及配置服务工具

Python全栈100天学习笔记Day35 Linux系统软件安装Shell编程及配置服务工具

linux 学习随笔-shell基础知识

Linux学习---Day04

Linux的学习笔记_Day1

Day5:Python学习笔记之Linux——用户和权限