【linux】shell脚本

简单的hello world
 echo -e "hello world\n"  
 sh+文件名//执行shell脚本
 
 [1@bogon shell]$ sh hello_world.sh 
hello world

sh - x +文件名  //查看脚本执行过程

[1@bogon shell]$ sh -x hello_world.sh 
+ echo -e 'hello world\n'
hello world


年月日时分秒
 1: time.sh
  1 date "+%y-%m-%d %H-%m-%s"          
  2 
  3 
  4 date -d "+1 month" "+%y-%m-%d %H-%m-%s"
  5 date -d "+1 year" "+%y-%m-%d %H-%m-%s"
  6 
  7 date "+%Y-%m-%d %h-%m-%s"
  8 
打印
[1@bogon shell]$ sh -x time.sh 
+ date '+%y-%m-%d %H-%m-%s'
21-01-29 09-01-1611883884
+ date -d '+1 month' '+%y-%m-%d %H-%m-%s'
21-03-01 09-03-1614562284
+ date -d '+1 year' '+%y-%m-%d %H-%m-%s'
22-01-29 09-01-1643419884
+ date '+%Y-%m-%d %h-%m-%s'
2021-01-29 1月-01-1611883884

简单的二数相加
这个是用户一个一个输入
  1 echo "input number a"
  2 read a
  3 echo "input number b"
  4 read b
  5 sum=$[$a+$b]               
  6 echo "sum = a+b sum=$sum"

[1@bogon shell]$ sh -x sum.sh 
+ echo 'input number a'
input number a
+ read a
4 
+ echo 'input number b'
input number b
+ read b
5
+ sum=9
+ echo 'sum = a+b sum=9'
sum = a+b sum=9

用户在执行时输入
  1 sum=$[$1+$2]                                        
  2 echo "$sum"
  
[1@bogon shell]$ sh -x ssum.sh 4 5
+ sum=9
+ echo 9
9

这次就使用到了预设变量,$1 $2都是预设变量
预设变量就是$1执行时输入的1,$2执行时输入的2
还有预设变量$0 指的就是脚本文件的文件名

  1 sum=$[$1+$2]
  2 echo "$0 $1 $2"                                     
  3 echo "$sum"

[1@bogon shell]$ sh -x ssum.sh 4 5
+ sum=9
+ echo 'ssum.sh 4 5'
ssum.sh 4 5
+ echo 9
9

  -eq:等于  
  -ne:不等于
  -le:小于等于
  -ge:大于等于
  -lt:小于   
  -gt:大于

shell脚本中的逻辑判断(if语句)
不带else

在if语句结束的时候一定要加fi,具体格式如下
  if 判断语句;then
  执行语句
  fi

  1 echo "input number a"
  2 read a
  3 if(($a>20));then
  4 echo "$a>20"                                    
  5 fi
~       
[1@bogon shell]$ sh -x ifnoelse.sh 
+ echo 'input number a'
input number a
+ read a
45
+ (( 45>20 ))
+ echo '45>20'
45>20

带else

具体格式如下:
  if 判断语句;then
  执行语句
  else
  执行语句
  fi

  1 echo "input number a"
  2 read a
  3 if(($a>10));then
  4   echo "$a>10"
  5 else
  6   echo "$a<=10"
  7 fi  
  
  [1@bogon shell]$ sh -x ifhaveelse.sh 
+ echo 'input number a'
input number a
+ read a
10
+ (( 10>10 ))
+ echo '10<=10'
10<=10

带elif

具体格式如下:
  if 判断语句;then
   执行语句
  elif判断语句2;then
  执行语句
  elif判断语句3;then
  执行语句
   else
   执行语句
  fi

  1 echo "input number a"
  2 read a
  3 if(($a>10));then
  4   echo "%a>10"
  5 elif(($a==10));then 
  6   echo "$a==10"
  7 elif(($a==9));then
  8   echo "$a==9"                                        
  9 else
 10   echo "a<10&&a!=9"
 11 fi
~
[1@bogon shell]$ sh -x ifhaveelif.sh
+ echo 'input number a'
input number a
+ read a
10
+ (( 10>10 ))
+ (( 10==10 ))
+ echo 10==10
10==10
[1@bogon shell]$ sh -x ifhaveelif.sh
+ echo 'input number a'
input number a
+ read a
9
+ (( 9>10 ))
+ (( 9==10 ))
+ (( 9==9 ))
+ echo 9==9
9==9
[1@bogon shell]$ sh -x ifhaveelif.sh
+ echo 'input number a'
input number a
+ read a
5
+ (( 5>10 ))
+ (( 5==10 ))
+ (( 5==9 ))
+ echo 'a<10&&a!=9'
a<10&&a!=9

shell中的循环语句
for语句

具体格式:
  for 变量 in 循环条件
  do
  执行语句
  done

  1 for i in $(seq 1 10)
  2 do
  3   echo "$i";
  4 done
  5    
  
  [1@bogon shell]$ sh for.sh 
1
2
3
4
5
6
7
8
9
10
[1@bogon shell]$ 
while语句

具体格式:
  while 循环条件
    循环条件为真才执行具体的执行语句
  do
  执行语句
  done

  1 i=0
  2 sum=0
  3 while ((i<10))                                        
  4 do  
  5   let sum+=i
  6   let ++i
  7 done
  8 echo "1+2+,,+9==$sum"

[1@bogon shell]$ sh while.sh 
1+2+,,+9==45

until语句

具体格式:
  until 循环条件
    当循环条件为真,就终止循环
  do
  执行语句
  done

  1 i=0
  2 sum=0
  3 until ((i>10))
  4 do
  5   let sum+=i
  6   let ++i
  7 done
  8 echo "1+2+,,,+10==$sum"  
  
  [1@bogon shell]$ sh until.sh 
1+2+,,,+10==55

自定义函数
函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。
  1 function hello()
  2 {
  3   echo "hello"
  4 }
  5 hello  //函数调用                                               
  6 function add() 
  7 {              
  8   #sum=$($1+$2)
  9   let sum=$1+$2
 10   echo "$sum"
 11 }        
 12 add $1 $2//函数调用

[1@bogon shell]$ sh function.sh  4 5
hello
9

编写shell脚本,计算1-100的和;

  1 i=1
  2 sum_while=0
  3 while ((i<=100))
  4 do 
  5   let sum_while+=i                                    
  6   let ++i            
  7 done                 
  8 echo "while:1+2+3,,,+100==$sum_while" 
  9                      
 10 j=1
 11 sum_until=0
 12 until ((j>100))
 13 do 
 14   let sum_until+=j;
 15   let ++j
 16 done 
 17 echo "until:1+2+3,,,+100==$sum_until"
 18 
 19 
 20 sum_for=0
 21 for m in $(seq 1 100)
 22 do 
 23   let sum_for+=m
 24 done 
 25 echo "for:1+2+3,,,+100==$sum_for"

[1@bogon shell]$ sh sum_1_to_100.sh 
while:1+2+3,,,+100==5050
until:1+2+3,,,+100==5050
for:1+2+3,,,+100==5050
[1@bogon shell]$ 

编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;

  1 a=0
  2 while ((a<=1))
  3 do
  4   echo "input number a it must greater than 1" 
  5   read a
  6 done
  7 sum=0;
  8 for j in $(seq 1 $a)
  9 do
 10   let sum+=j                                
 11 done
 12 echo "1+,,+a==$sum"

[1@bogon shell]$ sh input.sh 
input number a it must greater than 1
3
1+,,+a==6
[1@bogon shell]$ 

编写shell脚本,将当前目录下的文件拷贝到上层目录的dir目录下

shell 脚本中if还经常判断关于档案属性,
比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:

-e :判断文件或目录是否存在

-d :判断是不是目录,并是否存在

-f :判断是否是普通文件,并存在

-r :判断文档是否有读权限

-w :判断是否有写权限

-x :判断是否可执行
  1 d="./"
  2 dir="../dir"                                  
  3 for file in "./"
  4 do
  5   cp -r $file $dir
  6 done

在这里插入图片描述

编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组;

groupadd users
for i in $(seq 0 99)
do
        useradd -g users user_0$i'
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值