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 의 한 선생님 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.