欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux shell编程学习笔记(一)

程序员文章站 2022-03-05 08:09:29
...

Linux shell编程笔记

一:脚本开头固定格式:

#!/bin/bash 申明这是一个shell脚本文件

二:脚本保存后缀为 .sh ;运行.sh的方式有两种:

   (1)./接文件名.sh的方式运行   (2)/bin/sh   ./文件名.sh
   区别:第一种直接以点斜杠运行的方式,有时候需要先赋予文件可执行权限,第二种方式则可以直接运行,不需要赋予执行权限

三:shell脚本

   (1)变量定义:直接A=123或者FILE=“D:/xuexi/” 即可
   (2)变量的引用:$A或者$FILE      注意$与变量名之间不能有空格;$不仅可以引用变量,也可以直接引用其他命令的执行结果,然后赋值给其他变量
   如:USER=$(cat /root/users.txt)

(3)系统常用的一些变量引用:

           $# 是传给脚本的参数个数
           $0 是脚本本身的文件名
           $1 是脚本后接的第一个参数
           $2 是脚本后接的第二个参数
           [email protected] 是传给脚本的所有参数列表,"$1" "$2" "$3" … "$n"
          $*  是以一个单字符串显示传给脚本的所有参数,"$1 $2 $3 … $n"
         $$ 是脚本运行的当前进程ID号
         $? 是最后运行命令的结束状态码,0表示没有错误,其他表示有错误

(4)Linux中没有单引号

表示字符或者字符串需要用双引号引起来;
注意单引号与反引号的区别:反引号是键盘上Esc键下的那个键,与单引号是不同的,命令可以放在反引号里执行,但是不能放在单引号里执行,放在单引号里就成了字符串

(5) if判断语句

格式:
if 条件判断1;then
条件判断1成立时执行的操作

elif 条件判断2;then
条件判断2成立时执行的操作

else
所有条件判断都不成立时执行的操作
fi

#!/bin/bash
read -p "请输入你的分数" a
if [ -z $a ];then
  echo "分数的有效范围是 0~100分!!!"
  exit
fi
  if [ $a -ge 0 ] && [ $a -le 59 ];then
    echo "安慰奖"
  elif [ $a -ge 60 ] && [ $a -le 70 ];then
    echo "三等奖 "
  elif [ $a -ge 71 ] && [ $a -le 80 ];then
    echo "二等奖 "
  elif [ $a -ge 81 ] && [ $a -le 90 ];then
    echo "一等奖 "
  elif [ $a -ge 91 ] && [ $a -le 100 ];then
    echo "特等奖 "
else
   echo "分数的有效范围是 0~100分!!!"
fi 

注意:
(1)有时候if后的判断条件需要用单/双圆括号或者单/双中括号 括起来
(2)if条件后接分号;再接then ,注意语句块间的缩进对齐
**linux中shell条件判断if中的-a到-z的意思可参考:https://blog.csdn.net/wwwyuanliang10000/article/details/53610326?locationNum=13&fps=1
[ -a FILE ] 如果 FILE 存在则为真
[ -d FILE ] 如果 FILE 存在且是一个目录则为真
[ -z STRING ] “STRING” 的长度为零则为真

(6)for循环

      for 变量名  in 变量值列表
      do
         循环体
      done
#!/bin/bash
num=0
for i in {1..254}
do
 if [ `expr $i % 2` -eq 0 ];then
  echo $i
     let num++
 fi
done
echo "1-254 之间的偶数 "$num" 个"

(7)while循环

      while 条件测试操作
      do
       命令序列
      done
#!/bin/bash
PREFIX="stu"
i=1
while
[ $i -le 10 ]
do
useradd ${PREFIX}$i
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
let i++     #let的用法
done
[[email protected] ~]# sh useraddwhile.sh
[[email protected] ~]# tail /etc/passwd
stu1:x:1005:1005::/home/stu1:/bin/bash
stu2:x:1006:1006::/home/stu2:/bin/bash
stu3:x:1007:1007::/home/stu3:/bin/bash
stu4:x:1008:1008::/home/stu4:/bin/bash
stu5:x:1009:1009::/home/stu5:/bin/bash
stu6:x:1010:1010::/home/stu6:/bin/bash
stu7:x:1011:1011::/home/stu7:/bin/bash
stu8:x:1012:1012::/home/stu8:/bin/bash
stu9:x:1013:1013::/home/stu9:/bin/bash
stu10:x:1014:1014::/home/stu10:/bin/bash

循环体内部,通过语句“let i++”(等同于i=expr $i + 1)来是变量i的值增加1,一直循环,直到满足条件为止

(8)until循环 (直到型循环)

     until command
     do
        Statement(s) to be executed until command is true
     done
#!/bin/bash
declare -i i=10
declare -i sum=0
until ((i>10))
do
  let sum+=i
  let ++i
done
echo $sum

三种循环同样支持:break continue*

(9)case 分支

case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
* )
默认命令序列
esac
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "你输入的是字母 $KEY"
;;
[0-9])
echo "你输入的是数字 $KEY"
;;
*)
echo "你输入的是非法字符 $KEY"
esac
[[email protected] ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:1
你输入的是数字 1
[[email protected] ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:w
你输入的是字母 w
[[email protected] ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:@
你输入的是非法字符 @

read用法:

read -p 参数1 参数2 表示将读取参数1的内容,并赋值给参数2(相当于定义了一个变量同时为其赋值)
read 还可以读取用户输入,如:read -p “请输入你的分数” a 表示提示并读取用户输入,并保存在变量a中

相关标签: 经验总结