当前位置:   article > 正文

Linux shell编程学习_使用shell编程,编辑一个.sh文件,并执行该文件,使其显示hello+你的名字

使用shell编程,编辑一个.sh文件,并执行该文件,使其显示hello+你的名字

一、创建一个hello.sh

  1. #!/bin/bash
  2. echo "hello world"

① 注意 #!/bin/bash

shell脚本以 #!/bin/bash 开头,表示我们的shell为bash shell

② 脚本需要可执行权限

  1. [root@master-129 myshell]# chmod +x hello.sh
  2. [root@master-129 myshell]# ll
  3. 总用量 4
  4. -rwxr-xr-x. 1 root root 32 5月 28 17:33 hello.sh
  5. [root@master-129 myshell]# ./hello.sh
  6. hello world

添加可执行权限后,执行 ./hello.sh

③ 如果没有执行权限 可以使用sh命令也是可以的

  1. [root@master-129 myshell]# sh hello.sh
  2. hello world

二、变量

  1. #!/bin/bash
  2. #定义一个变量A
  3. A=100 ##注意这里不需要加$符号, "="等号两边不能加空格
  4. echo $A ###输出需要加$
  5. echo A=$A ##没有加引号也表示字符串,遇到$符号就表示是变量
  6. echo "A=$A" ##也是可以的 表示在字符串中
  7. #销毁变量
  8. unset A ##不用加$符号
  9. echo $A ##如果变量被销毁,输出为空
  10. ##定义一个静态变量
  11. readonly B=2 ##静态变量不能被销毁
  12. echo $B
  13. ## `` 和 $() 表示中间的字符串以命令执行后结果输出
  14. C=date
  15. D=`date`
  16. F=$(date)
  17. echo $C
  18. echo $D
  19. echo $F

①定义变量的规则

1、由字母、数字、下划线组成,不能以数字开头

2、等号两侧不能空格

3、变量名一般习惯为大写,这是一个规范

② 将命令的返回值赋值给变量

A=`date`

A=$(date)

③ 全局变量

1、在/etc/profile最后面添加

export PHP_HOME=/usr/local/php

上面的PHP_HOME就是全局变量

2、必须要用 source /etc/profile 才能生效

④多行注释

  1. :<<!
  2. 多行注释的内容
  3. !

⑤ 命令传参变量 

我们执行shell脚本时,可以在后面添加参数,然后脚本拿到参数变量

  1. #!/bin/bash
  2. echo "$0 $1 $2 $3" ## $0表示命令本身 $1变量1 $2变量2 $3变量3
  3. echo $* ##输出所有的传量参数
  4. echo $@ ##输出所有的传量参数
  5. echo $# ##变量的个数

执行上面的脚本

  1. [root@master-129 myshell]# sh position.sh 100 200 300
  2. position.sh 100 200 300
  3. 100 200 300
  4. 100 200 300
  5. 3

三、运算符 

有三种写法,推荐使用第二种,最重要的是语法跟编程语言不一样,例如java、php等,都是直接相加,而shell需要 $[a+b] 有一个运算写法

① #第一种 $((运算式))

  1. #计算 (2+3) * 4
  2. #第一种 $((运算式))
  3. R1=$(((2+3)*4))
  4. echo $R1

 ②  第二种 $[运算式] 推荐使用这种 比较直观

  1. R2=$[(2+3)*4]
  2. echo $R2

③ #第三种 expr

  1. #第三种 expr
  2. TEMP=`expr 2 + 3` ##运算式中间必须有 空格
  3. R3=`expr $TEMP \* 4` ## *乘以 必须是 \*
  4. echo $TEMP
  5. echo $R3

四、条件判断

 ① 判断条件

1) 字符串的比较使用 "=",  这个跟我们常规的编程语言不一样

2) 两个整数的比较 

-lt 小于

-le 小于等于

-eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

3)按照文件的权限进行判断

-r 有读的权限

-w 有写的权限

-x 有执行的权限

4) 按照文件的类型判断

-f 文件存在并且是一个常规的文件

-e 文件存在

-d 文件存在且是一个目录

4) 字符串

-z 字符串的长度为零则为真
-n 字符串的长度不为零则为真

② if 案例

if 可以用 [  ] 进行判断,也可以使用 tethst 来判断

  1. #!/bin/bash
  2. ## 判断ok 是否等于 ok
  3. if [ "ok" = "ok" ] ##判断的这里 if后面必须空格 [中间也需要空格]
  4. then
  5. echo "equel"
  6. fi
  7. ## 判断23是否大于等于22
  8. if [ 23 -ge 22 ]
  9. then
  10. echo "23大于22"
  11. fi
  12. ## 判断/root/1.sql是否存在
  13. if [ -f /root/1.sql ]
  14. then
  15. echo "文件存在"
  16. fi

解析:if 这块的then不能直接写在 if [] 后面,像if [] then这样语法是不通过的

③ if多分支

if elif else fi 格式

  1. #!/bin/bash
  2. if [ $1 -lt 60 ]
  3. then
  4. echo "小于60"
  5. elif [ $1 -gt 60 ]
  6. then
  7. echo "大于60"
  8. if [ $1 -gt 90 ]
  9. then
  10. echo "$1大于90"
  11. fi
  12. else
  13. echo "等于60"
  14. fi

④ case语句

  1. #!/bin/case
  2. case $1 in
  3. "1")
  4. echo "周一"
  5. ;;
  6. "2")
  7. echo "周二"
  8. ;;
  9. *)
  10. echo "other"
  11. ;;
  12. esac

使用的是 "1") 代码 ;; 组合判断的

五、循环

① 循环1到100

  1. #!/bin/bash
  2. ## 循环100的值相加
  3. SUM=0
  4. for (( i=0; i<=100; i++))
  5. do
  6. SUM=$[$SUM+$i]
  7. done
  8. echo $SUM

do done中的左边的SUM不需要带$符号

② 循环取出 $@ 的数据

$@表示命令行后面参数

  1. for i in $@
  2. do
  3. echo "num is $i"
  4. done

③ while 循环

$1表示命令行后面的参数 -le小于的意思

  1. #!/bin/bash
  2. SUM=0
  3. i=0
  4. while [ $i -le $1 ]
  5. do
  6. SUM=$[$SUM+$i]
  7. i=$[$i+1]
  8. done
  9. echo $SUM

④ 案例 九九乘法表

  1. #!/bin/bash
  2. for ((i = 1; i < 10; i++))
  3. do
  4. for ((j = 1; j < 10; j++))
  5. do
  6. n=$[ $i * $j ]
  7. #echo $n
  8. echo -n $i*$j=$n" "
  9. if [ $j -eq $i ]
  10. then
  11. break
  12. fi
  13. done
  14. echo ""
  15. done

 运行结果

六、read 读取控制台输入的内容

  1. #!/bin/bash
  2. #读取控制器输入的num1值
  3. read -p "请输入一个数字" NUM1
  4. echo "您输入的是$NUM1"
  5. #读取控制台的数字 10s内输入
  6. read -t 10 -p "请输入一个数字" NUM2
  7. echo "您输入的$NUM2"

七、系统函数

  1. [root@master-129 myshell]# dirname /root/1.txt
  2. /root
  3. [root@master-129 myshell]# basename /root/1.txt
  4. 1.txt

八、自定义函数

  1. #!/bin/bash
  2. ##定义一个函数
  3. function getSum() {
  4. SUM=$[ $m + $n ] ##这里的m和n变量名跟前面调用的要一样
  5. echo $SUM
  6. }
  7. read -p "请输入一个数字" n
  8. read -p "请输入一个数组" m
  9. getSum $n $m ##调用函数

九、shell案例,备份数据库

 ① 编写shell

  1. #!/bin/bash
  2. ## 每天凌晨2::30 备份mysql数据库 到/data/backup/db/
  3. ## 备份开始和备份能够给出相应的提示信息
  4. ## 备份文件名 2021-03-12_120210.tar.gz
  5. ## 备份的同时,检查是否有前10天的备份文件,如果有则删除
  6. back_dir=/data/backup/db/
  7. mysql_host=127.0.0.1
  8. mysql_user=root
  9. mysql_pwd=123456
  10. mysql_db_name=test2
  11. now_date=$(date +%Y-%m-%d_%H%M%S)
  12. now_date_path="$back_dir$now_date"
  13. backup_db_name="$now_date_path/$now_date.sql"
  14. backup_db_tar_file="$back_dir$now_date.tar.gz"
  15. #echo $now_date_path
  16. ## 1、创建路径
  17. if [ ! -d $now_date_path ]
  18. then
  19. mkdir -p $now_date_path
  20. echo "创建目录成功"
  21. fi
  22. ## 2、导出mysql命令
  23. mysqldump --single-transaction -h$mysql_host -u$mysql_user -p$mysql_pwd -B $mysql_db_name > $backup_db_name
  24. #echo "保存的路径=$backup_db_name"
  25. ## 3、进行打包
  26. echo $now_date_path
  27. ## 这块不能直接tar保存路径,不然tar把路径也保存了 所以需要使用cd
  28. ##tar -czvf $backup_db_tar_file $now_date_path
  29. cd $back_dir
  30. tar -czvf $backup_db_tar_file $now_date
  31. ## 4、删除路径
  32. rm -fr $now_date_path
  33. ## 5、删除10天前的备份文件
  34. find $back_dir -atime +10 -name "*.tar.gz" -exec rm {} \;

② 定时

  1. [root@master-129 myshell]# crontab -l
  2. 30 2 * * * sh /root/myshell/mysql_back.sh

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/676215
推荐阅读
相关标签
  

闽ICP备14008679号