我的专题我用 LinuxLinux

Shell 看完就会用

2018-02-03  本文已影响239人  司鑫
SHELL

一 什么是 Shell


shell 直译为壳,shell 是一个命令解释器,处于内核和用户之间,负责把用户的指令传递给内核并将执行结果回显给用户,同时 shell 也是一门编程语言。
shell 之所以被称为 shell ,是因为它隐藏了操作系统的底层细节。Unix 下的一些图形用户界面如 GNONE 、KDE... 也被称为是 “虚拟 shell”

二 常见的几种 shell


三 常用功能


  1. 历史命令
history  // 查询历史记录,显示最近使用的2000条命令(默认两千)
vi /etc/profile  //修改环境变量配置文件
HISTSIZE=1000   //修改默认历史命令条数

source /etc/profile 使环境变量生效
history  -w //把内存中命令历史,保存入文件
history  -c 
!n          //重复第n条命令
!str        //重复最后一个以str开头的命令
上箭头     //调用上面的命令
  1. 别名
alias
alias  ls='ls  --color=never'   手工设定别名,临时生效
vi  ~/.bashrc       在 ~/.bashrc 写入别名,永久生效
  1. 输出重定向
    即把输出在屏幕上的信息重定向到文件中(比如 log 信息)
>   覆盖
  ls  >  aa     将 ls 命令显示的信息覆盖到 aa 文件中

>>  追加
ls  >>  aa      将 ls 命令显示的信息追加到 aa 文件中

ls  gdlslga  2>>aa    将错误信息输出到 aa 文件中(ls gdlsga 命令会出错)

ls  >> aa  2>>bb      将正确信息输出到 aa 文件中,错误信息输出到 bb 中

ls  >>  aa  2>&1      将正确和错误信息都追加在 aa 中
  1. 多命令顺序执行
  1. 管道符
    命令1 | 命令2//命令1的执行结果,作为命令2的执行条件
netstat -tlun | grep 80                 查询监听的端口号,并查看80端口是否启动。
  1. 键盘读取
read  -p “提示信息”   [-t  等待时间]   变量名

# example.sh #
#!/bin/bash
read -p "please input num1:" -t 30  test1
read -p "input num2:" -t 30  test2
sum=$(( $test1 + $test2))
echo “num1 +  num2 = $sum”
  1. 数值运算
    变量默认是字符串类型,进行数值运算可有下面三种方法
num1=123
num2=456

1 declare -i sum=$num1+$num2
2 sum=$(( $num1 + $num2 ))
3 sum=$(expr $num1 + $num2)     注意+左右必须空格

支持的运算操作 +   -  \*  /  %取余

四 变量


变量设定规则

  1. 本地变量
变量名=变量值     注意:=号左右不能有空格
aa=123
echo $aa
set     查看所有变量,包括环境变量和本地变量
unset 变量名
  1. 环境变量
export  变量名=变量值
set 查看所有变量
env、export 只查看环境变量
declare     声明变量类型的,如果不特别声明,所有变量为字符串型
-i   声明为int 
-x   声明为环境变量
unset 变量名
/etc/profile
/etc/bashrc     所有用户生效

~/.bashrc
~/.bash_profile 只对指定用户生效
  1. 位置参数变量
    在执行 shell 脚本时手动传入参数
    eg:
sh example.sh a b 


 # example.sh #
#!/bin/bash

echo "the  command  is  $0"    // $0 代表命令自己
echo "param1 is  $1"      // $1 代表第一个参数即 a
echo "param2 is $2"       // $2 代表第一个参数即 b

五 常用命令


  1. 行提取命令 grep
选项: 
  -v 反向
  -n 显示行号

grep  “\.$” test.txt -n  // 匹配以 . 结尾的行并显示行号
  1. 列提取命令 cut
cut  -d  “分隔符”  -f  提取列   文件名

more /etc/passwd | grep "/bin/bash" | cut -d ":" -f 1,3
            提取passwd文件中可以登录的用户的用户名和UID

六 条件判断


格式

test  测试条件  测试内容
或
[ 测试条件 测试内容 ] // [] 中必须有空格
test  -e  文件名       测试文件是否存在,存在为真
test  -f  文件名       判断是否是普通文件
test  -d  文件名       判断是否为目录
test  -b  文件名       判断是否为块设备文件
test  -c  文件名       字符设备文件
test  -r  文件名       判断是否有可读权限
test  -w  文件名       可写
test  -x  文件名       执行
test  -s  文件名       判断是否为非空白,有内容为真
[ file1  -nt  file2 ]   file1是否比file2新
[ file1  -ot  file2 ]   file1是否比file2旧
[ file1  -ef  file2  ]  file1与file2是否是链接文件
[ n1  -eq  n2 ]     n1和n2是否相等
[ n1  -ne  n2 ]     n1和n2是否不等
[ n1  -gt  n2 ]     n1大于n2
[ n1  -lt  n2 ]     n1小于n2
[ n1  -ge  n2 ]     n1大于等于n2
[ n1  -le  n2 ]     n1小于等于n2
[ -z  字符串 ]     判断字符串是否为空
[ 字符串1  ==  字符串2 ]  判断字串1 是否与字串2相等
[ 字符串1  !=  字符串2 ]  判断字串是否不等
-a      逻辑与
    [ -z $file -a -e $file ]
-o      逻辑或 
!       逻辑非

七 流程控制


  1. if 语句
if  条件测试命令 
      then   命令序列
fi
if  条件测试命令
    then   命令序列1
    else   命令序列2
fi
if  条件测试命令1  ;  then
        命令序列1
    elif  条件测试命令2  ;  then
    命令序列2
    elif  ...
    else
    命令序列n
fi
  1. for 语句
for  变量名  in  取值列表
  do
     命令序列
 done 

eg:
for time in morning noon afternoon evening
   do
      echo $time
  done

files=$(ls)  //遍历 ls 的结果 
for time in $files 
   do
      echo $time
  done
s=0
for ((i=1;i<=100;i=i+1))
do
    s=$(($s+$i))
done
while  命令或表达式
  do
    命令列表
done
上一篇下一篇

猜你喜欢

热点阅读