简单的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