셸 기초 연습
32756 단어 Linux
#!/bin/bash
path="/home/learner1/dir1211/*"
i=0
j=0
for file in $path ; do
if [ -f $file ]; then
echo "file : $file"
((i++))
fi
if [ -d $file ]; then
echo "dir : $file"
((j++))
fi
done
echo " $i"
echo " $j"
#!/bin/bash
fileCount=`ls -l ~/dir1211|grep -c "^-"`
dirCount=`ls -l ~/dir1211 |grep -c "^d"`
echo " $fileCount"
echo " $dirCount"
2. 파일 을 대량으로 생 성 합 니 다.
홈 디 렉 터 리 에 하위 디 렉 터 리 애플 스 를 만 들 고 애플 스 디 렉 터 리 에 10 개의 파일 을 만 듭 니 다. 파일 이름 a0. txt a1. txt a2. txt...
echo " "
cd ~
if [ -d ~/apples ]
then
echo " "
else
echo " apples"
mkdir apples
fi
cd ~/apples
for (( i=0; i<10 ; i++ ))
do
touch a$i.txt
done
echo " "
3. 파일 이름 일괄 수정
#!/bin/bash
for files in `ls`
do
#
fname=${files:0:2}
#
bname=${files:0-4}
#
filename=$fname$bname
#
mv $files $filename
done
mvFileName(){
for element in `ls $1` ; do
obj=$1"/"$element
if [ -d $obj ]; then
mvFileName $obj
else
oriName=${obj%.txt}
echo $oriName
mv $obj $oriName'.data'
fi
done
}
mvFileName $1
4. 포트 번호 에 따라 프로 세 스 pid 가 져 오기 (centos 7 적용 되 지 않 음)
#!/bin/bash
echo " "
read addresspid=`sudo netstat -anp |grep :$address |cut -c 89- | cut -d / -f 1 `
#echo "$pid"
if [[ -n $pid ]];then
#echo ${pid%/*} | cut -f 7 -d " "
echo $pid
else
echo " "
fi
5. 대량 복사
#!/bin/bash
for file in *.c
do
cp ${file}${1}
done
ls ${1} –S
#!/bin/bash
for tmpFile in `find . -mtime -2`; do
if [ -f "$tmpFile" ]; then
cp $tmpFile ~/target
fi
done
6. while 연습
unset var
while [ "$var" != "end" ]; do
echo -n "please input a number: "
read var
if [ "$var" = "end" ]; then
break
fi
echo "var is $var"
done
#!/bin/bash
# Program:
# Repeat question until user input correct answer.
while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
do
read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."
#!/bin/bash
# Program:
# Use loop to calculate "1+2+3+...+100" result.
s=0 #
i=0 # , 1, 2, 3....
while [ "${i}" != "100" ]
do
i=$(($i+1)) # i 1
s=$(($s+$i)) # !
done
echo "The result of '1+2+3+...+100' is ==> $s"
7. 케이스 연습
스 크 립 트 를 작성 하여 다음 과 같은 기능 을 수행 합 니 다. 숫자 를 입력 하고 해당 하 는 명령 을 실행 합 니 다.다음 명령 을 표시 합 니 다: cmd meau * 1 – date 2 – ls 3 – who 4 – pwd 는 1 을 입력 하면 date 명령 을 실행 하고 2 를 입력 하면 ls 를 실행 합 니 다.
#! /bin/bash
echo "*cmd meau**"
echo "1--date"
echo "2--ls"
echo "3--who"
echo "4--pwd"
read -p "please input a num:" n
case $n in
1)
date
;;
2)
ls
;;
3)
who
;;
4)
pwd
;;
*)
echo "please input 1-4"
;;
esac
8. 파일 의 group 형식 사용자 가 쓰기 권한 이 없 으 면 쓰기 권한 을 추가 합 니 다.
#!/bin/bash
path=~/dir1211/learnShell/multiFileDir/
for X in ${path}* ; do
a=`ls -l $X | cut -c 6`
if [ "$a" == "-" ] ; then
chmod g+w $X
fi
done
9. 날짜 에 따라 파일 생 성
사용자 에 게 파일 이름 (예: ws) 을 입력 하고 그저께, 어제, 오늘 의 파일 (예: ws 20181214 ws 20181215 ws 20181216) 을 생 성 하 라 고 알려 줍 니 다.
#!/bin/bash
# Program:
# Program creates three files, which named by user's input and date command.
# 1. , fileuser ;
echo -e "I will use 'touch' command to create 3 files." #
read -p "Please input your filename: " fileuser #
# 2. Enter , ?
filename=${fileuser:-"filename"} #
# 3. date ;
for (( VAR = 0; VAR < 3; ++VAR )); do
date1=$(date --date="${VAR} days ago" +%Y%m%d) # N
file1=${filename}${date1}
touch "${file1}"
done
10. 아래 포트 가 열 렸 는 지 확인 합 니 다.
흔히 볼 수 있 는 port 와 관련 네트워크 서비스의 관 계 는 80: WWW 22: ssh 21: ftp 25: mail 이다.
#!/bin/bash
i=0
a=(:80
:22
:21
:25)
for X in 'WWW' 'ssh ' 'ftp' 'mail' ; do
a=`sudo netstat -nltp | grep ${a[$i]}`
if [ -n "$a" ] ; then
echo $X
else
echo $X
fi
((i++))
done
11. 날짜 간 의 차 이 를 계산한다.
#!/bin/bash
# Program:
# You input your demobilization date, I calculate how many days before you demobilize.
# 1. , ?
echo "This program will try to calculate :"
echo "How many days before your demobilization date..."
read -p "Please input your demobilization date (YYYYMMDD ex>20150716): " date2
# 2. , ? ~
date_d=$(echo ${date2} |grep '[0-9]\{8\}') #
if [ "${date_d}" == "" ]; then
echo "You input the wrong date format...."
exit 1
fi
# 3. ~
declare -i date_dem=$(date --date="${date2}" +%s) #
declare -i date_now=$(date +%s) #
declare -i date_total_s=$((${date_dem}-${date_now})) #
declare -i date_d=$((${date_total_s}/60/60/24)) #
if [ "${date_total_s}" -lt "0" ]; then #
echo "You had been demobilization before: " $((-1*${date_d})) " ago"
else
declare -i date_h=$(($((${date_total_s}-${date_d}*60*60*24))/60/60))
echo "You will demobilize after ${date_d} days and ${date_h} hours."
fi
12. for 연습
#!/bin/bash
# Program
# Use id, finger command to check system account's information.
# History
# 2015/07/17 VBird first release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
users=$(cut -d ':' -f1 /etc/passwd) #
for username in ${users} # !
do
id ${username}
done
#!/bin/bash
# Program
# Use ping command to check the network's PC state.
network="192.168.1" # !
for sitenu in $(seq 1 100) # seq sequence( )
do
# ping !
ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0 || result=1
# (UP) (DOWN)
if [ "${result}" == 0 ]; then
echo "Server ${network}.${sitenu} is UP."
else
echo "Server ${network}.${sitenu} is DOWN."
fi
done
#!/bin/sh
i=1
groupadd class1
while [ $i -le 30 ]
do
if [ $i -le 9 ] ;then
USERNAME=stu0${i}
else
USERNAME=stu${i}
fi
useradd $USERNAME
mkdir /home/$USERNAME
chown -R $USERNAME /home/$USERNAME
chgrp -R class1 /home/$USERNAME
i=$(($i+1))
done
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.