Centos 7 노트 의 셸 스 크 립 트 초보 연습

17464 단어 Linux
목표
centos 7 의 셸 스 크 립 트 가 셸 스 크 립 트 를 초보 적 으로 연습 하 는 주의사항 으로 바 뀌 었 습 니 다. 1. 처음에는 해석 기 를 써 야 합 니 다\#!/빈/bash 2. 문법 잠 금 은 네 개의 빈 칸 을 사용 합 니 다. 이름 규칙: 변수 이름 대문자, 함수 이름 소문 자, 이름 은 일정한 의미 가 필요 합 니 다.그러면 반 따옴표 로 묶 을 수 있어 요.
플랫폼
centos7.6
3. 명령 연습 1. 첫 번 째 셸 프로그램
[root@localhost mycode]# ./hello.sh 
hello world!~ kahn
Thu Aug 15 06:46:04 PDT 2019
[root@localhost mycode]# 
[root@localhost mycode]# cat hello.sh 
#!/bin/bash
# #   shell  
echo hello world!~ kahn
echo $(date)
[root@localhost mycode]# 

2. 두 번 째 셸 프로그램 연습
#!/bin/bash

echo "---------------------------------------------------------"
echo "  CPU  "
echo $(cat /proc/cpuinfo | grep 'model name')
echo "---------------------------------------------------------"
echo "        "
echo $(uptime)
echo "---------------------------------------------------------"
echo "      swap   "
echo $(free | grep wap)
echo "---------------------------------------------------------"
echo "         "
echo $(df -hT | grep 'boot')
echo "---------------------------------------------------------"
echo "      "
echo $(ip addr show ens33 | grep "inet ")
echo "---------------------------------------------------------"

3. 변 수 를 가 진 셸
[root@localhost mycode]# cat p003.sh 
#!/bin/bash
# #           。
echo "  $18  ,        18  "
echo "         \$18  。       \ "
xUser='kahn'
age=18
echo "hi everyone ,my name is $xUser, i am $age years old!"
xUser="xia"
echo "hello ladys and gentlemens, i am $xUser "
[root@localhost mycode]# 
[root@localhost mycode]# 
[root@localhost mycode]# ./p003.sh 
  8  ,        18  
         $18  。       \ 
hi everyone ,my name is kahn, i am 18 years old!
hello ladys and gentlemens, i am xia 

4. 따옴표 의 역할 `, 즉 shift + Tab 키 
[root@localhost mycode]# cat p004.sh 
#!/bin/bash
#      ``
xTime=`date`
echo $xTime
[root@localhost mycode]# ./p004.sh 
Thu Aug 15 07:39:03 PDT 2019
[root@localhost mycode]# 

5. 셸 수학 연산 하기
[root@localhost mycode]# cat p005.sh 
#!/bin/bash
#     
var1=100
var2=5
var3=`expr $var1 / $var2`
echo Result= $var3
[root@localhost mycode]# ./p005.sh 
Result= 20
[root@localhost mycode]# 

6. 셸 수학 연산 2
[root@localhost mycode]# cat p006.sh 
#!/bin/bash
#shell     2
var1=2
var2=10
var3=6
var4=$[$var1*($var2-$var3)]
echo result=$var4
[root@localhost mycode]# ./p006.sh 
result=8
[root@localhost mycode]# 

7. 셸 의 if 판단 문 1
[root@localhost mycode]# cat p007.sh
#!/bin/bash
# if       
read -p "       (xPWD     )" xPWD
if [  "$xPWD" == "37213690" ]
then
echo "      "
else
echo "      "
fi
[root@localhost mycode]# source p007.sh 
       (xPWD     )fewa^H^H
      
[root@localhost mycode]# source p007.sh 
       (xPWD     )37213690
      
[root@localhost mycode]# 

8. 셸 의 if 판단 문 2
[root@localhost mycode]# cat p008.sh 
#!/bin/bash
#         root     ,          
if [ "$(id -u)" -eq "0" ]
then
tar -czvf /home/kahn/etc.tar.gz /etc &> /dev/null
echo "     "
else
echo "     "
fi
[root@localhost mycode]# source p008.sh 
     

9. 셸 의 if 판단 문 3
[root@localhost mycode]# cat p010.sh 
#!/bin/bash
#        
if [ $1 -ge 101 ];then
echo "      100"
elif [ $1 -ge 90 ];then
echo "          90"
elif [ $1 -ge 80 ];then
echo "        80,     "
elif [ $1 -ge 60 ];then
echo "      ,         "
elif [ $1 -eq 100 ];then
echo "     ,   "
else
echo "       60 "
fi
[root@localhost mycode]# ./p010.sh 100
          90
[root@localhost mycode]# ./p010.sh 99
          90
[root@localhost mycode]# ./p010.sh 81
        80,     
[root@localhost mycode]# ./p010.sh 50
       60 
[root@localhost mycode]# 

10. case 로 날 짜 를 판단 하여 데 이 터 를 백업 합 니 다.
[root@localhost mycode]# cat p011.sh 
#!/bin/bash
#         
DATE=$(date +%a)
TIME=$(date +%Y%m+%d)

case $DATE in Mon | Sat)
	tar -czvf /home/kahn/${TIME}_bak.tar.gz /etc &> /dev/null
	echo "${TIME}      "
	;;
*)
	echo "    ,    。     ${DATE}"
esac
[root@localhost mycode]# source p011.sh 
201908+17      
[root@localhost mycode]# 

11. 사용자 가 입력 한 것 이 무엇 인지 케이스 로 판단
[root@localhost mycode]# cat p012.sh 
#!/bin/bash
#case          
case $1 in
[a-z]|[A-Z])
echo "       :$1"
;;
[[:digit:]])
echo "       :$1"
;;
*)
echo "        "
esac
[root@localhost mycode]# ./p012.sh 
        
[root@localhost mycode]# ./p012.sh 11
        
[root@localhost mycode]# ./p012.sh 1
       :1
[root@localhost mycode]# ./p012.sh k
       :k
[root@localhost mycode]# 

12. for 메 일 순환 보 내기 (기능 에 문제 가 있 을 수 있 습 니 다. for 의 용법 만 보 여 줍 니 다)
[root@localhost mycode]# chmod u+x p013.sh 
[root@localhost mycode]# 
[root@localhost mycode]# ./p013.sh 
./p013.sh: line 6: /var/log/kahn_runLog: No such file or directory
         :kahn
./p013.sh: line 6: /var/log/kahn_runLog: No such file or directory
         :xia
./p013.sh: line 6: /var/log/kahn_runLog: No such file or directory
         :serena
./p013.sh: line 6: /var/log/kahn_runLog: No such file or directory
         :baobao
[root@localhost mycode]# 

13. for 순환 으로 구구 곱셈 표 1
[root@localhost mycode]# cat p014.sh 
#!/bin/bash
#     
for i in {1..9}
do
	for j in {1..9}
	do
	printf "%-8s" "$i*$j"
	done
	echo
done
[root@localhost mycode]# 
[root@localhost mycode]# source p014.sh 
1*1     1*2     1*3     1*4     1*5     1*6     1*7     1*8     1*9     
2*1     2*2     2*3     2*4     2*5     2*6     2*7     2*8     2*9     
3*1     3*2     3*3     3*4     3*5     3*6     3*7     3*8     3*9     
4*1     4*2     4*3     4*4     4*5     4*6     4*7     4*8     4*9     
5*1     5*2     5*3     5*4     5*5     5*6     5*7     5*8     5*9     
6*1     6*2     6*3     6*4     6*5     6*6     6*7     6*8     6*9     
7*1     7*2     7*3     7*4     7*5     7*6     7*7     7*8     7*9     
8*1     8*2     8*3     8*4     8*5     8*6     8*7     8*8     8*9     
9*1     9*2     9*3     9*4     9*5     9*6     9*7     9*8     9*9     
[root@localhost mycode]# 

14. for 순환 으로 구구 곱셈 표 2
[root@localhost mycode]# cat p014.sh 
#!/bin/bash
#     
for i in {1..9}
do
	for ((j=1;j<=i;j++))
	do
	printf "%-8s" "$i*$j"
	done
	echo
done
[root@localhost mycode]# source p014.sh 
1*1     
2*1     2*2     
3*1     3*2     3*3     
4*1     4*2     4*3     4*4     
5*1     5*2     5*3     5*4     5*5     
6*1     6*2     6*3     6*4     6*5     6*6     
7*1     7*2     7*3     7*4     7*5     7*6     7*7     
8*1     8*2     8*3     8*4     8*5     8*6     8*7     8*8     
9*1     9*2     9*3     9*4     9*5     9*6     9*7     9*8     9*9     
[root@localhost mycode]# 

15. for 순환 으로 구구 곱셈 표 3
[root@localhost mycode]# cat p014.sh 
#!/bin/bash
#     
for i in {1..9}
do
	for ((j=1;j<=i;j++))
	do
	printf "%-8s" $j*$i=$((j*i))
	done
	echo
done
[root@localhost mycode]# source p014.sh 
1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  
[root@localhost mycode]# 

16. while 로 사용자 일괄 추가
[root@localhost mycode]# cat p015.sh 
#!/bin/bash
#      

NUM=1
while [ $NUM -le 20 ]
do
	userdel -r xUser${NUM}
	useradd xUser${NUM}
	ID=`id xUser${NUM}`
	echo xUser${NUM}"   UID "${ID}
	echo xUser${NUM}"    "
	NUM=$((NUM+1))
done
[root@localhost mycode]# ./p015.sh 
xUser1   UID uid=1022(xUser1) gid=1022(xUser1) groups=1022(xUser1)
xUser1    
xUser2   UID uid=1023(xUser2) gid=1023(xUser2) groups=1023(xUser2)
xUser2    
xUser3   UID uid=1024(xUser3) gid=1024(xUser3) groups=1024(xUser3)
xUser3    
。。。。。
xUser20   UID uid=1041(xUser20) gid=1041(xUser20) groups=1041(xUser20)
xUser20    
[root@localhost mycode]# 

17. while 로 메뉴 만 들 기
[root@localhost mycode]# cat p016.sh 
#!/bin/bash
# while     
while true
do
clear
echo "-----------------------------------------------------"
echo "1. CPU  "
echo "2.       "
echo "3.     "
echo "4.       "
echo "5.     "
echo "-----------------------------------------------------"
read -p "        (1-5)" userSelect
case $userSelect in
    1)
	echo $(cat /proc/cpuinfo | grep "model name")
	read -p "             :"
	;;
    2)
	echo $(uptime)
        read -p "             :"
        ;;
    3)
	echo $(free)
        read -p "             :"
        ;;
    4)
	echo $(df -hT)
        read -p "             :"
        ;;
    5)
	exit 0
	;;
    *)
        read -p "             :"
esac
done

	
[root@localhost mycode]# 

18. until 로 사용자 일괄 삭제
[root@localhost mycode]# cat p017.sh 
#!/bin/bash
#  until      
a=20
until [ $a -eq 0 ]
do
    userdel -r xUser${a}
    echo "user xUser${a} deleted!"
    a=$((a-1))
done

19. select 로 선택
[root@localhost mycode]# cat p018-select.sh 
#!/bin/bash
#select    
echo "Where r u from ?"
select var in 'sh' 'bj' 'zz' 'zmd' 'LH' 'gz'
do
break
done
echo "u r form $var"
[root@localhost mycode]# ./p018-select.sh 
Where r u from ?
1) sh
2) bj
3) zz
4) zmd
5) LH
6) gz
#? 1
u r form sh
[root@localhost mycode]# 

20. 제어 문 break 와 contine 의 사용
[root@localhost mycode]# cat p020-continue-break.sh 
#!/bin/bash
#     continue break   
for num in {1..20}
	do
	case $num in
		1)
			continue
			;;
		18)
			break
			;;
	esac
		echo ${num}
done
sleep 3
exit
echo "   echo        "
[root@localhost mycode]# ./p020-continue-break.sh 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost mycode]# 

21. 셸 로 사용자 정의 함수 쓰기 (방법)
[root@localhost mycode]# cat p021-function.sh 
#!/bin/bash
#        

#  :     
Hint() {
read -p "      :"
}

#  :  cpu  kahn
Display_CpuInfo() {
echo
echo -e "\033[4;31mDisplay the CPU info:\033[0m"
cat /proc/cpuinfo | grep "model name"
cat /proc/cpuinfo | grep "cpu cores"
#       cpu       
grep -Eq "svm|vmx" /proc/cpuinfo && echo"CPU Virtualiztion:Support" || echo "CPU Virtualiztion: No Support"
}

#  :      
Display_LoadInfo() {
echo
echo -e "\033[4;31mKahn Display system load info:\033[0m"
echo "    :`uptime | awk 'BEGIN{FS=","}{print $1}' | awk 'BEGIN{FS=" "}{print $1}'`"
echo "    :`uptime | awk 'BEGIN{FS=","}{print $1}' | awk 'BEGIN{FS=" "}{print $3}'`"
}

#  :      
Display_MemoryInfo() {
echo -e "\033[4;31mDisplay memory info:\033[0m"
free
}

#  :        
Display_DiskInfo() {
echo -e "\033[4;31mDisplay disk info:\033[0m"
df -hT
}


# while     
while true
do
clear
echo "-----------------------------------------------------"
echo "1. CPU  "
echo "2.       "
echo "3.     "
echo "4.       "
echo "5.     "
echo "-----------------------------------------------------"
read -p "        (1-5)" userSelect
case $userSelect in
    1)
	Display_CpuInfo
	Hint
	;;
    2)
	Display_LoadInfo
	Hint
        ;;
    3)
	Display_MemoryInfo
	Hint
        ;;
    4)
	Display_DiskInfo
	Hint
        ;;
    5)
	break
	;;
    *)
        read -p "             :"
esac
done

[root@localhost mycode]# 

22. 사용자 가 입력 한 비밀번호 가 정확 한 지 판단 하고 최대 3 회 이상 허용 되 지 않 음
[root@localhost mycode]# cat p022-CheckPassword.sh 
#!/bin/bash
#         ,    3 
xPwd="kahn37213690" #    
x=0 #     

while true
do
read -p "Type your password pls!" inputPWD    #         
x=$((x+1))	#    1
if [ $inputPWD == $xPwd  ];then
	echo "       ,   !"
	break
elif [ $x -lt 3 ];then
	continue
else
	echo "        ,    3  ,  ."
	break
fi
done
[root@localhost mycode]# ./p022-CheckPassword.sh 
Type your password pls!1
Type your password pls!2
Type your password pls!3
        ,    3  ,  .
[root@localhost mycode]# ./p022-CheckPassword.sh 
Type your password pls!kahn37213690
       ,   !
[root@localhost mycode]# 

23. 스 크 립 트 를 사용 하여 서버 의 온라인 여 부 를 모니터링
[root@localhost mycode]# cat p023-CheckOnlineStatus.sh 
#!/bin/bash
#  shell           
ipList="223.5.5.5 192.168.0.1 127.0.0.1 10.100.100.210"
for ip in $ipList;do
    num=1
    while [ $num -le 3 ];do
	if ping -c 1 $ip >/dev/null;then
	    echo "$ip ping is success"
	    break
	else
	    echo "$ip ping is fail $num"
	    failCount[$num]=$ip
	    let num++
	fi
    done
    #   3  ip    
    if [ ${#failCount[*]} -eq 3 ];then
	echo "${failCount[1]} Ping is fail"
	unset failCount[*]
    fi
done

24. 스 크 립 트 를 사용 하여 서버 의 온라인 여 부 를 모니터링 2
[root@localhost mycode]# cat p024-ChenkOnlineStatus-v2.sh 
#!/bin/bash
#shell           
ipList="223.5.5.5 192.168.0.1 127.0.0.1 10.100.100.210"
for ip in $ipList;do
    failCount=0
    for ((i=1;i<=3;i++));do
        if ping -c 1 $ip > /dev/null;then
	    echo "$ip ping is success!"
	    break
	else
	   echo "$ip ping is fail $i"
	   let failCount++
	fi
    done
    if [ $failCount -eq 3 ];then
	echo "ping        $ip"
    fi
done
[root@localhost mycode]# source p024-ChenkOnlineStatus-v2.sh 
223.5.5.5 ping is success!
192.168.0.1 ping is fail 1
192.168.0.1 ping is fail 2
192.168.0.1 ping is fail 3
ping        192.168.0.1
127.0.0.1 ping is success!
10.100.100.210 ping is success!
[root@localhost mycode]# 

25. Liux 는 셸 스 크 립 트 로 문자열 이 ipV 4 주소 인지 판단 합 니 다.
[root@localhost mycode]# cat p025-isIpv4Address.sh 
#!/bin/bash
#  ip     ip v4.
function isIPv4 {
    ip=$1
    valid_check=$(echo $ip|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255&&$1!=0{print "YES"}')
    if echo $ip | grep -E "^[0-9]{1,3}\.[0-9{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null;then
	if [ $valid_check == "YES" ];then
	    echo "$ip is IPv4 address!"
	else
	    echo "$ip     ipv4  "
	fi
    else
	echo "$ip     。。。"
    fi
}
isIPv4 127.0.0.1
isIPv4 223.5.5.5
isIPv4 a.b.c.d
isIPv4 1.a.3.b
isIPv4 kahn.xiao
isIPv4 i love sh!
isIPv4 0.11.22.33
isIPv4 255.255.255.0
[root@localhost mycode]# . p025-isIpv4Address.sh 
127.0.0.1 is IPv4 address!
223.5.5.5 is IPv4 address!
a.b.c.d     。。。
1.a.3.b     。。。
kahn.xiao     。。。
i     。。。
0.11.22.33     。。。
255.255.255.0     。。。
[root@localhost mycode]# 

26. linux 는 셸 스 크 립 트 로 문자열 이 IPV 4 주소 인지 판단 합 니 다 2
[root@localhost mycode]# cat p026-isIpv4Address.sh 
#!/bin/bash
#  ip     ip v4.
function isIPv4 {
    ip=$1
    valid_check=$(echo $ip|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255&&$1!=0{print "YES"}')
    if echo $ip | grep -E "^[0-9]{1,3}\.[0-9{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null;then
	if [ $valid_check == "YES" ];then
	    echo "$ip is IPv4 address!"
	    return 0	#    0
	else
	    echo "$ip     ipv4  "
	    return 1	#    1
	fi
    else
	echo "$ip     。。。"
	return 1	#    1
    fi
}
while true;do
    read -p "     ip  :" ipaddress
    isIPv4 $ipaddress
    [ $? -eq 0 ] && break || continue	#          ip,      。        ip
done
[root@localhost mycode]# source p026-isIpv4Address.sh 
     ip  :1.1.1.1
1.1.1.1 is IPv4 address!
[root@localhost mycode]# source p026-isIpv4Address.sh 
     ip  :a.b.c.1
a.b.c.1     。。。
     ip  :0.1.2.2
-bash: [: ==: unary operator expected
0.1.2.2     ipv4  
     ip  :a
a     。。。
     ip  :223.5.5.5
223.5.5.5 is IPv4 address!
[root@localhost mycode]# 

27. 셸 스 크 립 트 시험 문제 로 입력 한 내용 에 따라 해당 하 는 내용 을 되 돌려 준다 고 합 니 다.
[root@localhost mycode]# chmod u+x p027-panduan.sh 
[root@localhost mycode]# 
[root@localhost mycode]# ./p027-panduan.sh 
/root/foo.sh redhat|fedora
[root@localhost mycode]# ./p027-panduan.sh redhat
fedora
[root@localhost mycode]# ./p027-panduan.sh fedora
redhat
[root@localhost mycode]# cat p027-panduan.sh 
#!/bin/bash
#                  
case $1 in
    fedora)
	echo "redhat"
	;;
    redhat)
	echo "fedora"
	;;
    *)
	echo "/root/foo.sh redhat|fedora"
esac
[root@localhost mycode]# 

 
4. 셸 스 크 립 트 를 실행 하 는 몇 가지 방법
1. 스 크 립 트 에 실행 가능 한 권한 부여 chmod u + x kahn. sh      ##시스템 에 키 프로 세 스 를 열 어 실행 시 키 는 셈 이다.
2. 권한 이 없 으 면 bash 또는 sh 를 통 해 실행: bash kahn. sh 또는 sh kahn. sh    ##이런 방법의 장점 은 셸 스 크 립 트 에서 첫 줄 의 해석 기 를 쓰 지 않 아 도 된다 는 것 이다
3. 권한 없 음, source 또는. 실행: source kahn. sh  혹은  kahn.sh    ##현재 셸 환경 에서 스 크 립 트 실행
kahn 2019 년 8 월 18 일 22: 45: 00, 과정 학 은 TLXY 의 한 선생님 입 니 다.

좋은 웹페이지 즐겨찾기