栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

shell基础知识

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shell基础知识

shell基础篇
  • Linux shell 是一种特殊的交互式工具,它提供了文件管理,运行进程的途径。

  • Shell 的核心是命令提示符,允许用户输入命令,然后解释命令,并在内核中执行。

  • 用户可以编写脚本文件,将多个 shell 命令以某种形式组织起来,作为程序一起执行

    程序执行方式

编译:高级语言–>编译器–>目标代码(Java,C#)

解释:高级语言–>解释器–>机器代码(shell,python)

  • shell编程:过程式,解释执行
  • shell脚本:包含一些命令或声明,并符合一定格式的文本文件
  • 格式要求:首行 shebeng 机制

如:

#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl

shell脚本的用途:

  • 自动化常用命令
  • 执行系统管理和故障排除
  • 创建简单的应用程序和处理文本或文件
入门和变量使用

变量的命名法则:

不能使用程序中的保留字:如if,for

只能使用数字,字母下划线。且不能使用数字开头

命名尽量有意义,可用驼峰命名法

局部变量
1. 变量赋值:name='value'或"value"
  1. 变量可以是字符串:name=“string”
    3. 变量引用:name=“$USER”
    4. 命令引用:
    • name=hostname
    • name=$(hostname)
5. 变量的引用:${name} ,$name
6. 显示已定义的所以变量:set
7. 删除变量:unset name(变量名)
环境变量
  1. 变量声明,赋值:

    • export name=值
      • declare -x name=值
    1. 变量引用: n a m e , {name} , name,name
    2. 显示环境所有变量:env,export,declare -x,printenv
    3. 删除变量:unset name
var=`cat /etc/文件名`
echo "${var}"
#" " 当中加变量输出可以保留文件格式
echo $$ 
#输出当前进程号
echo $PPID
#输出父进程号
#pstree -p    查看进程树

#export/declare -x  都可以声明环境变量
#env/export   都可以显示环境变量
#unset 变量名    删除变量

只读和位置变量

()中执行命令开启子shell不影响当前环境。{}中执行命令补开启子shell影响当前环境。()和{}的共同点作为一个整体把括号内的多个内容作为一个整体同一执行

1. 只读变量(常量):只能声明,不能修改和删除。

2. 声明只读变量:

   * readonly name

   * declare -r name

3. 查看只读变量:readonly -p

4. 位置变量:在脚本代码中调用通过命令行传递给脚本的参数

   * $1,$2...:对应第1个,第2个...参数 
  • ${10} :10个以上的参数要加上{ } ,不然会识别成" $1+0"

  • $*:传递给脚本的所有参数,作为一个整体进行传参

    • @ : 传 递 给 脚 本 的 所 有 参 数 , 每 个 参 数 独 立 分 开 ( = = " @:传递给脚本的所有参数,每个参数独立分开(==" @:传递给脚本的所有参数,每个参数独立分开(=="*“和”$@"只有在被双引号包起来才会有差异==)
    1. $0 :命令本身 (是软连接是代表软连接

      • set – 清空所有差数
      • shift 去掉第一参数后续参数向前移动一位(也可以指定去掉几个 shift n 默认去掉一个)
退出状态码
 * 0代表执行成功,1-255代表失败
 true: 返回状态码为0,false返回值为 1
 * $? 保存最近退出的命令和脚本退出的状态
 * exit [n]  可以自定义n为什么数字,退出后赋值给{ $?}
 * 注意:脚本中一旦执行到exit ,脚本会自动退出。脚本退出的状态取决于脚本执行最后一条命令的状态码:
 * sleep [n]  执行这条命令程序休眠n秒
逻辑运算符
  • 非:!

  • !1 = 0; !0=1;

    • 短路与 &&

    • 命令1 && 命令2 ; 如果命令1为真时执行执行命令2,反之命令1为假时不需要执行命令2.

    • 短路或 ||

    • 命令1 || 命令2 ; 如果命令1为假时执行执行命令2,反之命令1为真时不需要执行命令2.

    • 异或:^

    • 异或的两个值,相同为假不同为真

  a=4 b=6;

  a=$[a^b];b=$[a^b];a=$[a^b];echo $a $b
   
    #!/bin/bash
   
    x=a
    y=b
    [ "$x" = "$y" ] && echo 1 || echo 2
    #[ ] 内可以做数值运算也可以做字符串比较
    #x与y值相等打印1,x与y值不相等打印2
    
    #怎么判断磁盘利用率大于80
    #
    DF="`df | grep sd | tr -s " " ":" | cut -d: -f5 | cut -d% -f1| sort -nr| head -nl`" 
    [${df} -ge 80 ] && echo ">80%"
    
    ```

 

### 基础算术

 1. bash中算术运算+,-*,/,%(取余数),**(乘方),[help let]
 
 2. let var=算术表达式
 
 3. var=$[算术表达式]
 
 4. var=$((算术表达式))
 
 5. declare -i var = 数值
 
 6. echo `算术表达式` | bc
 
 7. 乘法符号有些场合中需要转义,如*
 
 8. bash中有内置随机数:$RANDOM (0-32767)
 
    * echo $[$RANDOM%50]    取0-49之间的随机数

##### 赋值

1.增强型:+=,-=,*=,/=,%=

* 如  let n+=3   #n=n+3    

2. 自增,自减 
* let n++   #n+1

* let n--     #n-1



###### read  交互赋值

* 基本语法
* -p:指定读取值时的提示符;
* -t:指定读取值时等待的时间(秒)如果-t不加表示一直等待

```shell
[root@ytzZ shell01]# read a b c
1 2 3
[root@ytzZ shell01]# echo $a $b $c
1 2 3

#!/bin/bash

read -t 10 -p "请输入用户名称:" name  #没有输入时,在10秒后自动退出
echo "welcome, $name"

expr 整数运算
#运算符之间要有空格
# + ,- ,* ,/
[root@ytzZ ~]expr 2 + 3
5
[root@ytzZ ~]echo $[2 + 3]
5

条件判断
[root@hadoop100 ]# a=18
[root@hadoop100 ]# test $a = 18  #判断a 是否等于Hello
[root@hadoop100 ]# echo $?   #捕获返回值——>true: 返回状态码为0,false返回值为 1
0

[root@hadoop100 ]#[ $a = 18 ]  #判断a 是否等于Hello
[root@hadoop100 ]# echo $?   #捕获返回值——>true: 返回状态码为0,false返回值为 1
0
[root@hadoop100 ]#[ dawdadwadaw ] 
[root@hadoop100 ]# echo $?   
0
[root@hadoop100 ]#[  ] 
[root@hadoop100 ]# echo $?   
1

流程控制
  1. 单分支
if [ 条件判断式 ]; then
	程序
fi 
或者
if [ 条件判断式 ]
then
	程序
fi
  1. 多分支
if [ 条件判断式 ]
then
	程序
elif [ 条件判断式 ]
then
	程序
else
	程序
fi

 
#/bin/bash
if [ $1 -lt 18 ]
then
	echo "未成年 $1"
elif [ $1 -lt 25 ]
then
	echo "壮年 $1"
elif [ $1 -lt 50 ]
then
	echo "中年 $1"
else
	echo "老年 $1"
fi
  1. case 语句
#基本语法
case $变量名 in 
"值1")
如果变量的值等于值1,则执行程序1~
;;
"值2")
如果变量的值等于值2,则执行程序2~
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

#(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
#(2)双分号“;;”表示命令序列结束,相当于java中的break..
#(3)最后的“*)”表示默认模式,相当于java中的default。~

#/bin/bash
case $1 in
"1")
	echo "*"
;;
"2")
	echo "**"
;;
"3")
	echo "***"
;;
"*")
	echo "-----"
;;
esac
3. 循环(for-while)
  • 基本语法

    for((初始值; 循环控制条件; 变量变化))
    do
    	程序
    done
    
    
    #!/bin/bash
    #"$(( 运算式 ))"和"$[ 运算式 ]"
    for (( i=0; i <= $1; i++ ))  
    do
    	sum=$[ $sum + $i ]
    done
    echo $sum
    
    #/bin/bash
    if (( $1 > 1 ))
    then
    	echo "OK"
    else
    	echo "NO"
    fi
    
  • 基本语法2

for 变量 in 值1 值2 值3...
do
	程序
done
#!/bin/bash
for i in 1 2 3 4;do echo $i; done
for i in {1..50}
do 
	sum=$[ $sum + $i ]
done
echo $sum
∗ − − − − − − − *------- ∗−−−−−−−@
# $@ 和 $* 的区别
#!/bin/bash
echo "==========$*========"
for i in $*; do echo $i; done

echo "==========$@========"
for i in $@; do echo $i; done

echo "=========="$*"========"
for i in "$*"; do echo $i; done

echo "=========="$@"========"
for i in "$@"; do echo $i; done
  • whlie
#语法
while [ 条件判断式 ]
do
	程序
done

#从1加到100
#!/bin/bash
i=1
while [ $i -le 100 ]
do
	sum2=$[ $sum2 + $i ]
	i=$[ $i + 1 ]
done
echo $sum2
i=1
echo "======let======"
while [ $i -le 100 ]
do
	let sum3+=$i
	let i++
done
echo $sum3
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/828331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号