# chmod 755 xxxx.sh # ./xxxx.sh
# bash xxxx.sh
Debug
# bash -x xxxx.sh
Use # to comment out a line.
# This is a bash comment.
#!/bin/sh dir=$(pwd) echo $dir
FIRSTLETTERS="ABC" FIRST_THREE_LETTERS="ABC" firstThreeLetters="ABC" MY_SHELL="bash" my_another_shell="my another shell" My_Shell="My shell"
3LETTERS="ABC" # The first letter is not available for numbers first-three-letters="ABC" # you don't use '-' first@Thtree@Letters="ABC" ABC = "ABC" # you don't use space. My-SHELL="bash" # you don't use '-'
You can use $(command) to store the command output in a variable.
$ LIST=$(ls /etc/ssh) $ echo $LIST moduli ssh_config ssh_config.d sshd_config sshd_config.d sshd_config.org ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_ecdsa_key ssh_host_ecdsa_key.pub ssh_host_ed25519_key ssh_host_ed25519_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub ssh_import_id
WHO=$(whoami) DATE=$(date +%Y%m%d)
[ -d "$dir" ] || mkdir $dir [ ! -d "$dir" ] && mkdir $dir [ -z "$END" ] && END=$(date --date '1day ago' +"%Y%m%d"2359)
-d file : True if file exists and is a directory. -f file : True if file exists and is a regular file. -z arg : True if argument is null string1 = string2 : True if string1 and string2 are equal. string == pattern : True if string matches pattern. string != pattern : True if string does not match pattern. A -eq B : A is equal B A -ne B : A is not equal B A -gt B : A is grater than B A -ge B : A is grate equal B A -lt B : A is less than B A -le B : A is little equal B
#!/bin/sh
test -f /tmp/tmp.txt
if [ "$?" -ne "0" ]; then
echo "ERR : "
else
echo "SUCCESS : "
fi
#!/bin/sh
if [ -z $1 ]; then
echo "Error: argument is null"
exit 1
fi
test -f $FILE || exit 1
if cp from to; then echo "copy success" else echo "copy failed" fi
if ! cp from to; then echo "copy failed" fi
if [ "$?" -ne 0 ] ; then echo "ERROR : XXXXXX." exit 1 fi
if [ "${USER}" != "root" ] ; then
echo "ERROR : Change root user."
exit 1
fi
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
if [ ! -d ${DIR} ]; then
mkdir -p ${DIR}
fi
if [ "$VERV_FLAG" == "true" ] ; then
ECHO="on"
SSHVERV=""
BASHVERV=""
elif [ "$DEBUG_FLAG" == "true" ] ; then
ECHO="on"
SSHVERV="-v"
BASHVERV="-x"
else
SSHVERV="-q"
BASHVERV=""
fi
| -a | and |
| -o | or |
if test xxx -a xxx; then echo "aaa" fi
if [ "$?" -eq 0 -a "$a" = 1 ]; then if test "$?" -eq 0 -a "$a" = 1 ; then
case "$VAR" in
[qQ] )
echo "Quit"
;;
[yY]es | "YES" )
echo "Yes"
;;
[nN]o | "NO" )
echo "No"
;;
*)
echo "etc"
;;
esac
for host in $(cat /tmp/hostlist.txt)
do
scp tmp.sh ${host}:/tmp
ssh -n ${host} "hostname;sudo su - -c '/tmp/tmp.sh'"
done
#!/bin/sh
FLAG=0
for i in aaa bbb
do
echo $i
if [ "$?" -ne 0 ] ; then
FLAG=1
logger "ERR : $i"
fi
done
exit $FLAG
H="server1 server2" date;for i in $H ; do echo "# $i"; echo $i ; done
while read i
do
echo ${i} | awk '{ print $1 }'
HOST=$(echo ${i} | awk '{ print $1 }' )
done < /tmp/hostlist.txt
#!/bin/sh
NUM=1
while [ "${NUM}" -le 5 ]
do
echo "${NUM}"
NUM=$(( ${NUM} + 1 ))
sleep 1
done
#!/bin/sh FILE="test.txt" cat $FILE |grep XXX | while read i do echo $i done
while : ; do date; /usr/sbin/ntpq -p ; df -h ; sleep 1 ; clear ; done
#!/bin/sh
#./test.sh 192.168.0.10 test-server
IP=$(echo $1)
HOST=$(echo $2)
echo "$IP $HOST"
echo $0
echo $@
echo $#
DIR=$(dirname ${0})
echo $DIR
$0 : shellname $1 : argument1 $2 : argument2 $@ : all argument = arg1 arg2 arg3 .... $# : argument numbers
~]# ./test.sh 192.168.0.10 test-server 192.168.0.10 test-server ./test.sh 192.168.0.10 test-server . ~]# /tmp/test.sh 192.168.0.10 test-server 192.168.0.10 test-server /tmp/test.sh 192.168.0.10 test-server /tmp ~]#
#!/bin/sh
COMMAND1 () {
echo "$1"
}
COMMAND1 192.168.0.10
#!/bin/bash
log() {
local level="$1"
shift
echo "$(date '+%Y-%m-%d %H:%M:%S') [$level] $*"
}
log INFO "Script started"
log DEBUG "Processing file: $filename"
log ERROR "Failed to connect to the database"
#!/bin/sh
COMMAND1 () {
echo "$1"
}
cat <<MENU
***************************************************************
TEST
---------------------------------------------------------------
1) COMMAND1
q) quit
***************************************************************
MENU
echo -n -e "\t >"
read NUM
case ${NUM} in
1) echo "COMMAND1"
COMMAND1 $IP
;;
q|Q) echo "quit"
exit ;;
*) echo "exit : no selection is missed."
exit
;;
esac
#!/bin/sh cat << EOT > tmp.txt test1 test2 EOT
#!/bin/bash
arrays=(
"test.sh arg1"
"test2.sh arg1 arg2"
"test3.sh"
)
arrays+=("test4.sh arg1")
for array in "${arrays[@]}"
do
"${array}"
done
#!/bin/bash
arrays=(
"aaa 111"
"bbb 222 333"
"ccc"
)
for array in "${arrays[@]}"
do
echo "${array}"
for hoge in "${array}"
do
echo "${hoge}"
done
done
i=2 v1=$(( (i + 1) * 5 )) #recommend v2=$(expr \( $i + 1 \) \* 5)
# /usr/bin/id user01 > /dev/null 2>&1 || echo "useradd user01" # /usr/bin/id user01 > /dev/null 2>&1 || /usr/sbin/useradd user01 # /usr/bin/id user01 > /dev/null 2>&1 && echo "userdel user01" # /usr/bin/id user01 > /dev/null 2>&1 && /usr/sbin/userdel -r user01 # command 1>/dev/null 2>/dev/null
# cat test.txt 1 2 3 4 5 # sed -n '2p' test.txt 2 # sed -n '$p' test.txt 5 # sed -e '1,4d' test.txt 5 # sed -e '1,3d' test.txt 4 5 # sed -e '3,$d' test.txt 1 2
# cat test.txt 1 2 4 5 #sed '/^ *$/d' test.txt 1 2 4 5
| Operation | Command |
|---|---|
| 1st column | awk '{ print $1 }' FILE |
| 1,4 column | awk '{ print $1 $4 }' FILE |
| 2 column , “:” is filed sepalater | awk -F: '{ print $2 }' |
#echo "1 2 3 4 5" | awk '{ print $1,$3 }'
1 3
#
#echo "1 2 3 4 5" | awk '{ print $1","$3 }'
1,3
#
#echo "1 2 3 4 5" | awk '{ print $NF }'
5
#
#echo "1 2 3 4 5 6 7 8" | awk '{ {for(i=2;i<NF;i++)printf("%s ",$i) }print($NF) }'
2 3 4 5 6 7 8
#
#echo "1 2 3 4 5" | awk '{print $1 " " $4 }'
1 4
#
#echo "1 2 3 4 5" | awk '{print $1 "\t" $4 }'
1 4
#
#echo "1 2 : 3 4 : 5" | awk -F: '{ print $2 }'
3 4
#
cat test.txt | mail -s "TITLE" test@example.com
#!/bin/bash mailaddr="user1@example.com, user2@example.com" cat <<EOM | mail -s "$(hostname): TEST" $mailaddr Dear testuser This is test mail $(date) ----------------------- $(cat /tmp/test.txt) EOM
mysql -u root -pPASS << EOF use mysql; show tables; EOF
sed -e 's/\&/\&/g' -e 's/>/\>/g' -e 's/</\</g' -e 's/"/\"/g' -e "s/'/\&\#039;/g" sample.txt > sample.txt ------------------------- < : < > : > & : & " : " ' : '